如何安排后台任务

时间:2010-01-14 10:03:17

标签: android

似乎有几种方法可以执行后台任务。我的用法是让我的应用程序每隔x分钟获取一次数据馈送,无论我的gui是否正在运行,无论手机是否正在睡眠。

我使用闹钟管理器来安排与广播接收器匹配的意图。在onRecieve方法中,我启动一个服务(startService),它产生一个AsyncTask。任务获取数据并存储它,然后stopSelf()服务。

在onRecieve方法中,我在启动服务之前获取PARTIAL_WAKE_LOCK,并且在服务中调用stopSelf()之前,我再次释放它。

这真的是最好的方法吗?在这种情况下我甚至需要这项服务吗?

我在这种设置中遇到奇怪的行为,其中设置工作了几个小时然后突然停止,这使得调试非常困难。

有没有人有一个简单的万无一失的方法来实现同样目的?

1 个答案:

答案 0 :(得分:5)

  

我使用闹钟管理员来安排   意图匹配广播接收者。   在onRecieve方法我开始了   service(startService),它产生   一个AsyncTask。任务获取数据   并存储它然后stopSelf()   服务。

我建议使用IntentService而不是AsyncTask / stopSelf()模式,否则这看起来很合理。

  

在onRecieve方法中我获得了一个   PARTIAL_WAKE_LOCK,在开始之前   服务,就在打电话之前   在服务中stopSelf(),我发布   再一次。

这是有道理的。我在WakefulIntentService开源组件中做了同样的事情。

  

这真的是最好的方法吗?

你当然看起来很亲密。

  

我是否甚至需要这项服务   方案

如果您在预定的基础上需要做的事情只保证一秒左右,您可以在BroadcastReceiver中执行此操作。否则,您需要在后台线程上完成工作,BroadcastReceivers不能分叉后台线程。