基本上,我需要编写的代码很简单,但由于我是初学者,我仍然对Service,IntentService,创建一个独立于主Activity / UI线程的新线程等感到困惑。我将首先解释Task和那么,我认为这可能是最好的。

任务

主Activity / UI有两个按钮,Start和Stop。 应用程序应该循环执行两个任务,TaskA和TaskB。 按下Start时,执行循环。 这个循环内有这些步骤 -

  1. 在主活动的UI上更新状态:“在60秒内执行TaskA”
  2. 等待60秒
  3. 更新状态...:“TaskA执行”
  4. 执行TaskA
  5. 更新状态......:“120秒内任务B执行”
  6. 等120秒
  7. 更新状态...:“TaskB Executing”
  8. 执行TaskB

完成后,循环重复。 此循环必须持续到用户按下“停止”。 如果主活动/ UI处于onPause,onStop或onDestroy,则此循环不得停止,中断或销毁。 主活动/ UI应与循环线程完全分开。

停止按钮:停止执行循环内的所有步骤,无论它是哪一步。 取消所有计划任务并停止服务。 应用程序现在应该处于的状态必须是第一次启动App(与按下Start之前的状态相同)。

问题

我不确定Service和IntentService的全部功能。 我知道Service可以执行多线程,而IntentService执行任务队列并逐个执行。

潜在解决方案

我上面的循环需要按照确切的顺序执行这8个步骤,因此IntentService将是理想的解决方案。

但我的问题是:我可以创建一个完全独立于主活动/ UI线程的IntentService,以便它不依赖于Main Activity的生命周期或线程吗?

如果没有,那么实现这一目标的理想选择是什么?

谢谢

===============>>#1 票数:3 已采纳

我上面的循环需要按照确切的顺序执行这8个步骤,因此IntentService将是理想的解决方案。

并不是的。 IntentService专为事务性工作而设计:做几秒或几分钟的工作,然后就离开了。 你需要的是一些无限期运行的东西。

我可以创建一个完全独立于主活动/ UI线程的IntentService,以便它不依赖于Main Activity的生命周期或线程吗?

IntentService通常与进程的主应用程序线程关系不大。

更好的解决方案是定期Service 使用标准的Java ScheduledExecutorService来处理事件的时间并在后台线程上触发它们的工作。 在服务的onStartCommand()中开始工作,由您的活动的startService()调用触发。 停止在您的服务的onDestroy()中工作,由您的活动的stopService()调用触发。 startService()stopService() ,您的服务至少会运行一段时间。

更好的是,如果你的投票期更长,那就是使用AlarmManager并让它控制你在这个事件的时间点。 这样,您的Service不会一直堵塞内存。 就目前而言,如果用户不重视您的服务,他们将倾向于任务杀死您的应用。

  ask by KickAss translate from so

未解决问题?本站智能推荐: