我是一名 iOS 开发人员,最近开始进行 Android 开发。目前我需要应用程序在后台对远程资源(JSON 文件)执行重复检查,我想这样做:
- 应用完成启动
- 在Application子类中启动定时重复任务
- 如果远程 JSON 文件有任何变化,应用程序将被通知并相应地处理
在做了一些研究之后,我发现似乎有很多方法可以实现这一点,虽然我可以排除其中的一些,但我无法真正分辨出其余的和我应该使用的区别。
我发现要执行计划的重复任务,我可以使用以下类:
ScheduledThreadPoolExecutor
IntentService
报警管理器
Runnable
(使用postInBackgroundDelayed
/DelayedRunnable
,或者ScheduledExecutorService
?)
我已经排除了使用:
ScheduledThreadPoolExecutor
,我读到它最适合在需要多个工作线程时使用,在我的例子中我只需要一个AlarmManager
,即使应用程序未运行时也会执行此任务,而我只需要在应用程序运行时执行任务
剩下的是 IntentService
和 Runnable
,据我目前的理解:
IntentService
,需要手动启动和停止,通过向服务发送Intent来调用任务,然后广播结果Runnable
,就像Objective-C中使用的block一样,在适当的时候执行一段特定的代码
除了这些还有什么区别吗?我的理解正确吗?它们都适合我的任务吗?既然如此,在选择使用哪一个之前有什么考虑吗?
谢谢!
最佳答案
要在 Android 中创建长时间运行的后台任务,您应该在您的应用程序中创建一个服务。
服务在应用的主线程上执行,优先级最高的为Activity,即使用户退出应用也继续运行。
服务有以下类型:
- 开始服务
- 前台服务
- 绑定(bind)服务
- 意向服务
在服务的实现中,您应该创建另一个线程,例如使用 ScheduledThreadPoolExecuter 并将您要完成的工作委托(delegate)给该线程。
根据您的要求,您可以创建一个简单的服务,扩展服务类,并在onStart() 方法,创建您的线程来为您完成所需的工作。
关于java - Android中执行后台定时重复任务,以及IntentService和Runnable的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37958908/