java - Android中执行后台定时重复任务,以及IntentService和Runnable的区别

标签 java android android-service threadpoolexecutor android-intentservice

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

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

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

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

  1. ScheduledThreadPoolExecutor
  2. IntentService
  3. 报警管理器
  4. Runnable(使用 postInBackgroundDelayed/DelayedRunnable,或者 ScheduledExecutorService?)

我已经排除了使用:

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

剩下的是 IntentServiceRunnable,据我目前的理解:

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

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

谢谢!

最佳答案

要在 Android 中创建长时间运行的后台任务,您应该在您的应用程序中创建一个服务

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

服务有以下类型:

  • 开始服务
  • 前台服务
  • 绑定(bind)服务
  • 意向服务

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

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

关于java - Android中执行后台定时重复任务,以及IntentService和Runnable的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37958908/

相关文章:

java - 使用 Java 编译 Scheme

java - 当应用程序从 Android 中最近的应用程序中滑出时,服务停止

android - 等待 TextToSpeech onInit() 初始化

android - 如何取消前台服务使用通知(滑动关闭)或清除所有通知?

java - Tapestry5-xtensions - 它可以与 Tapestry 5.3 一起使用吗?

java - Eclipse - 如何定义在 Java 配置执行之前执行的批处理文件?

java - 在函数中读取和设置byte[]

android - 从 viewpager 中的 fragment 获取数据

android - 在 react-native 中运行预构建脚本

android - 无法加载游戏 : findLibrary returned null: with cocos2d-x, 尽管尝试了很多次仍未成功?