Android应用程序中的独立时间跟踪:服务还是asynctask?

时间:2015-06-11 08:12:02

标签: android android-asynctask broadcastreceiver android-service

我正在尝试按时跟踪应用:推送"开始"在一个任务上,计时器启动某个地方,计算它的时间,在一段时间限制后显示通知 - "你迟到了#34;但是计时器继续。应用程序有很多活动,计时器应该在其中一个上更新UI。无论用户的操作如何,在活动,来电,配置更改或离开应用程序之间传递,都应该计算时间 最好的方法是什么?我正在考虑使用ServiceBroadcastReceiver来更新用户界面,但我不知道如何保护它不被停止。

1 个答案:

答案 0 :(得分:1)

使用BroadcastReceiver的服务对于向您的Activity发送UI更新消息的后台计时器来说是一个很好的解决方案。你可能看了here。您的问题不是很具体,所以我无法提供任何代码,但我会尝试为您提供一个方法和注意事项,以帮助您构建计时器服务:

您的计时器服务必须在后台运行,无论用户操作或可能启动的其他应用程序或手机转为睡眠模式。从服务启动服务后,您的服务将开始计算(我建议使用处理程序及其postDelayed()功能)。您需要使用BroadcastReceiver将Service更新命令从Service发送到您的Activity。请确保在Activity的onPause()中断开Receiver,并在onResume()方法中重新连接,这样您就可以安全地切换活动或退出应用程序。

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

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

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