Android执行后台定时重复任务,IntentService和Runnable的区别

Perform background scheduled repeating task in Android, and differences between IntentService and Runnable

我是一名 iOS 开发人员,最近开始 Android 开发。目前我需要应用程序在后台对远程资源(JSON 文件)执行重复检查,我想这样做:

  1. 应用程序完成启动
  2. 在 Application 子类中启动计划的重复任务
  3. 如果远程 JSON 文件有任何变化,应用程序将被通知并相应地处理它

经过一些研究,我发现似乎有很多方法可以实现这一点,虽然我可以排除其中的一些,但我无法真正分辨出其余的和我应该使用的区别。

我发现要执行计划的重复任务,我可以使用以下 类:

  1. ScheduledThreadPoolExecutor
  2. IntentService
  3. AlarmManager
  4. RunnablepostInBackgroundDelayed/DelayedRunnable,或者 ScheduledExecutorService?)

我已经排除了使用:

  1. ScheduledThreadPoolExecutor,我读到这最适用于需要多个工作线程的情况,在我的例子中我只需要一个
  2. AlarmManager,即使应用程序不是运行,也会执行此任务,而我只需要在应用程序运行
  3. 时执行任务

其余的 IntentServiceRunnable,据我目前的理解:

  1. IntentService,需要手动启动和停止,通过向服务发送Intent来调用任务,然后广播结果
  2. Runnable,如Objective-C中使用的块,在适当的时间执行的特定代码段

除了这些还有什么区别吗?我的理解正确吗?它们都适合我的任务吗?既然如此,在选择使用哪一个之前有什么考虑吗?

谢谢!

要在 Android 中创建 long-运行ning 后台任务,您应该在您的应用程序中创建一个 Service

服务在应用的主线程上执行,最高优先级为Activity,即使用户退出应用也继续运行。

服务有以下类型:

  • 开始服务
  • 前台服务
  • 绑定服务
  • 意图服务

在服务的实现中,您应该创建另一个线程,例如使用 ScheduledThreadPoolExecuter 并将您要完成的工作委托给该线程。

根据您的要求,您可以创建一个简单的服务扩展服务class,并在 onStart() 方法中,创建您的线程来为您完成所需的工作。