Android Java 服务和定时器/线程休眠

标签 android service timer sleep intentservice

基本上,我需要编写的代码很简单,但作为初学者,我仍然对 Service、IntentService、创建与主 Activity/UI 线程分离的新线程等感到困惑。我将解释首先是任务,然后是我认为如何最好地实现这一目标。

任务

Main Activity/UI 有两个按钮,Start 和 Stop。该 App 应该循环执行两个任务,TaskA 和 TaskB。当按下开始时,循环被执行。循环中有这些步骤-

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

完成后,循环重复。这个循环必须继续,直到用户按下停止。如果 Main Activity/UI 处于 onPause、onStop 或 onDestroy 状态,则此循环不得停止、中断或销毁。 Main Activity/UI 应该与循环线程完全分开。

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

问题

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

可能的解决方案

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

但我的问题是:我能否创建一个完全独立于 Main Activity/UI 线程的 IntentService,使其不依赖于 Main Activity 的生命周期或线程?

如果没有,实现这一目标的理想替代方案是什么?

谢谢

最佳答案

My cycle above needs to perform those 8 steps in that exact order so IntentService would be the ideal solution.

不是真的。 IntentService 专为事务性工作而设计:做几秒钟或几分钟的工作,然后离开。您需要的是可以无限期运行的东西。

can I create an IntentService that is completely independent from the Main Activity/UI thread so that it does not rely on the Main Activity's lifecycle or thread?

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

更好的解决方案是常规服务。使用标准的 Java ScheduledExecutorService 来处理事件的时间并在后台线程上触发它们的工作。在服务的 onStartCommand() 中开始这项工作,由您的 Activity 调用 startService() 触发。在您的服务的 onDestroy() 中停止该工作,由您的 Activity 调用 stopService() 触发。在 startService()stopService() 之间,您的服务将至少运行……一段时间。

更好的是,如果您的轮询周期更长,则可以使用 AlarmManager 并让您及时控制此事件点。这样,您的 Service 就不会一直阻塞内存。就目前而言,如果用户不重视您的服务,他们很可能会终止您的应用。

关于Android Java 服务和定时器/线程休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16071214/

相关文章:

swift - 我无法在 Swift 3 中使用计时器更改 label.text

android - ADB 拒绝 shell 命令 (ls -l) : closed

Android 屏幕录制操作方法 - 横向录制、录制的视频以全屏与部分屏幕播放

Android:从服务测试 Activity 是否正在运行。

android - 在 Android 上更改按钮文本

Java:如何在指定时间仅运行此代码一次?

android - 上传前压缩相机图像

android - 如何正确使用和跟踪 App-invites?

angular - 类型 'map' 中缺少属性 'Observable<any[]>'

java - 锁定文件以验证服务的单次执行。有多可靠?