具有计时器和活动互动的Android后台服务

时间:2017-03-26 14:27:28

标签: android android-activity service timer

我需要一个必须由计时器在准确时间启动的后台服务,然后应该连续运行直到执行其任务的另一个确切时间,除了用户可以从Activity停止此任务。

如果多个计时器同时触发,则服务必须并行执行所有作业,然后在所有作业结束时自行停止。

我应该用什么来完成这个?一个ServiceIntentService?另一种背景任务? 然后,如何在不执行其他任务的情况下停止每项任务?有没有办法将每个服务实例链接到数据库实体,以便我可以在用户需要时停止任务?

1 个答案:

答案 0 :(得分:2)

IntentService无法帮助您完成任务。一次只有一个IntentService实例。如果多个事件被触发,所有这些事件将进入一个队列,从中将串行执行它们。所以这里没有满足你的并行执行要求。

我认为你可以通过使用AsyncTask实现这一目标的最好方法之一。在完成计时器时触发AsyncTAsk,在doInBackGround中执行后台工作,并随时取消任务。内部AsyncTask也维护自己的线程池。所以你不必担心创建多个线程和堵塞资源。

AsyncTask可能会导致一些问题,并在取消和状态更改时遇到一些问题。对于初学者来说,它会起到作用。

参考:https://developer.android.com/reference/android/os/AsyncTask.html

另外,如果你想探索最好的方法,我会说用RxAndroid。它可以很轻松地处理AsyncTask的所有缺点并满足您的所有要求。有关Android中异步编程的最佳实践之间的比较,请参阅:http://code.hootsuite.com/asynchronous-android-programming-the-good-the-bad-and-the-ugly/

您可以参考:https://github.com/ReactiveX/RxAndroid 你可以找到很多教程。