android - 即使屏幕关闭,如何在后台运行代码?

标签 android flutter

我在 Flutter 中有一个简单的计时器应用程序,它显示剩余秒数的倒计时。我有:

new Timer.periodic(new Duration(seconds: 1), _decrementCounter);

在我的手机显示屏关闭(即使我切换到另一个应用程序)并进入休眠状态之前,它似乎工作正常。然后,计时器暂停。是否有推荐的方法来创建即使屏幕关闭也能在后台运行的服务?

最佳答案

回答如何实现您的特定计时器案例的问题实际上与后台代码无关。在移动操作系统上不鼓励在后台整体运行代码。

例如,iOS 文档在这里更详细地讨论了背景代码: https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

相反,移动操作系统提供 api(如计​​时器/警报/通知 api)以在特定时间后回调您的应用程序。例如,在 iOS 上,您可以通过 UINotificationRequest 请求您的应用程序在未来的特定时间点得到通知/唤醒: https://developer.apple.com/reference/usernotifications/unnotificationrequest 这允许他们终止/暂停您的应用程序以实现更好的节能效果,而是拥有一个高效的共享系统服务来跟踪这些通知/警报/地理围栏等。

Flutter 目前不提供任何开箱即用的操作系统服务封装,但是使用我们的平台服务模型编写您自己的封装是很简单的: flutter.io/platform-services

我们正在开发一种用于发布/共享此类服务集成的系统,以便一旦有人编写此集成(例如安排您的应用的某些 future 执行),每个人都可以受益。

另外,“是否可以运行后台 Dart 代码”(没有在屏幕上激活 FlutterView)这个更普遍的问题是“还没有”。我们有一个文件错误: https://github.com/flutter/flutter/issues/3671和一个 Unresolved 问题:https://github.com/flutter/flutter/issues/32164

驱动这种后台代码执行的用例是当您的应用收到通知时,想要使用一些 Dart 代码来处理它,而不是将您的应用置于前台。如果您有其他需要我们了解的后台代码用例,欢迎就该错误发表评论!

关于android - 即使屏幕关闭,如何在后台运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924890/

相关文章:

带有背景音乐的 Flutter App(外部)

ios - Flutter::iOS多种方案不同的Firebase项目

flutter - 为什么 initState 中的变量不可访问?

flutter - 如何垂直缩短边框

java - 同时在 firebase 中添加多个条目

android - RuntimeException:自定义 TextView 加载字体无法制作原生字体或内存泄漏

android - OSMDroid:当用户点击 map 时添加标记

android - 检测从 ListView 中选择了哪个项目

android - 如何清除所有WebView存储的信息?

android - 如何在 flutter google map 网络服务插件中获取当前位置?