android 应用中的独立时间跟踪:服务还是异步任务?

Independent time tracking in android app: service or asynctask?

我正在尝试做一个时间跟踪应用程序:你在任务上按 "start",计时器在某处启动,计算它的时间,在一段时间限制后显示通知 - "you are late",但计时器继续。应用程序有很多活动,计时器应该在其中一个上更新 UI。它应该计算时间,而不管用户的操作、活动之间的传递、来电、配置更改或离开应用程序。
最好的方法是什么?我正在考虑 ServiceBroadcastReceiver 来更新 UI,但我不知道如何防止它被停止。

带有 BroadcastReceiver 的服务将是一个很好的后台计时器解决方案,它向您的 Activity 发送 UI 更新消息。您可能看起来 here。您的问题不是很具体,所以我无法提供任何代码,但我会尝试为您提供一个方法和注意事项,让您着手构建计时器服务:

您的定时器服务必须在后台运行,无论用户操作或其他可能启动的应用程序如何,或者 phone 何时进入睡眠模式。一旦您的服务从 Activity 启动,您的服务就会开始计数(我建议使用 Handler 和它的 postDelayed() 功能)。您需要使用 BroadcastReceiver 将 UI 更新命令从服务发送到您的 Activity。请务必在 Activity 的 onPause() 中断开 Receiver 并在 onResume() 方法中重新连接,以便您可以安全地在活动之间切换或退出您的应用程序。

您需要部分 Wakelock 来防止您的服务在设备进入睡眠模式时停止。

您的服务也可能被 Android 系统或什至被用户从控制面板停止。在 onStartCommand() 函数中,您可以 return 标志 START_STICKY 以在发生此类事件时自动重启您的服务。

你应该知道,当你的服务完成它的任务时,它应该总是 stopSelf() 以避免电池耗尽问题。