【问题标题】:Android background service with Timer and Activity interaction带有 Timer 和 Activity 交互的 Android 后台服务
【发布时间】:2017-03-26 14:27:28
【问题描述】:

我需要一个后台服务,它必须在一个确切的时间由一个计时器启动,然后应该持续运行直到另一个确切的时间来执行它的任务,除非这个任务可以被用户从一个活动中停止。

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

我应该用什么来完成这个? Service? IntentService?另一种类型的后台任务? 然后,我怎样才能停止每个任务,而不打扰其他任务的执行?有没有办法将这些服务实例中的每一个链接到数据库实体,以便我可以在用户需要时停止任务?

【问题讨论】:

    标签: android android-activity service timer


    【解决方案1】:

    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 你可以找到很多教程。

    【讨论】:

    • Rx Android 看起来是所有服务混乱的一个很好的替代品。我只需要了解如何启动和停止这些任务...谢谢!
    • 很高兴能帮上忙 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多