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

我在 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 代码来处理它,而不是将您的应用置于前台。如果您有其他需要我们了解的后台代码用例,欢迎就该错误发表评论!

https://stackoverflow.com/questions/41924890/

相关文章:

flutter - 如何在 Flutter 中以编程方式显示/隐藏小部件

android - 如何使用 Flutter 更改应用显示名称构建?

dart - Flutter中Column的 child 之间的空间

flutter - 如何在 flutter 中使用进度指示器?

flutter - 在 Flutter 中延迟一段时间后如何运行代码?

dart - 如何在段落中加粗(或格式化)一段文本?

dart - 具有透明背景的 flutter 角半径

flutter - 等待另一个flutter命令释放启动锁

dart - Flutter 移除所有路由

android-studio - 未找到 flutter 命令