我在 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/