似乎有几种方法可以执行后台任务。我的用法是让我的应用程序每隔x分钟获取一次数据馈送,无论我的gui是否正在运行,无论手机是否正在睡眠。
我使用闹钟管理器来安排与广播接收器匹配的意图。在onRecieve方法中,我启动一个服务(startService),它产生一个AsyncTask。任务获取数据并存储它,然后stopSelf()服务。
在onRecieve方法中,我在启动服务之前获取PARTIAL_WAKE_LOCK,并且在服务中调用stopSelf()之前,我再次释放它。
这真的是最好的方法吗?在这种情况下我甚至需要这项服务吗?
我在这种设置中遇到奇怪的行为,其中设置工作了几个小时然后突然停止,这使得调试非常困难。
有没有人有一个简单的万无一失的方法来实现同样目的?
答案 0 :(得分:5)
我使用闹钟管理员来安排 意图匹配广播接收者。 在onRecieve方法我开始了 service(startService),它产生 一个AsyncTask。任务获取数据 并存储它然后stopSelf() 服务。
我建议使用IntentService
而不是AsyncTask
/ stopSelf()
模式,否则这看起来很合理。
在onRecieve方法中我获得了一个 PARTIAL_WAKE_LOCK,在开始之前 服务,就在打电话之前 在服务中stopSelf(),我发布 再一次。
这是有道理的。我在WakefulIntentService
开源组件中做了同样的事情。
这真的是最好的方法吗?
你当然看起来很亲密。
我是否甚至需要这项服务 方案
如果您在预定的基础上需要做的事情只保证一秒左右,您可以在BroadcastReceiver
中执行此操作。否则,您需要在后台线程上完成工作,BroadcastReceivers
不能分叉后台线程。