我有一个 IntentService,它是从带有startService(service)的 BroadcastReceiver 启动的。当我在 BroadcastReceiver 中获得新信息时,新信息会通过带有startService(service)的意图再次推送到 IntentService,但随后服务会重新启动。我可以防止这种情况吗?我想将新信息推送到 IntentService 而不重述它。
问问题
415 次
2 回答
1
意图服务旨在以意图开始,执行其工作并完成。从这个角度来看,它们更像是一个异步任务。这就是您的意图服务正在重新启动的原因。
onHandleIntent
应该做一些工作并完成。你可以做一些技巧来阻止它,但这会违背意图服务的本质。
你应该做的是拥有一个经典的服务。如果您遇到 ANR 错误,您应该在线程内执行所有时间密集型操作,或者在服务本身托管的异步任务中执行。
于 2013-03-18T21:37:12.173 回答
0
我假设您需要共享一些状态来处理服务中的后续意图。我看到两个解决方案:
- 使用 IntentService 并在 onHandleIntent 中保存和恢复此状态。
- 使用已启动的服务,并将此状态保存为服务类中的一个字段。为了防止 ANR,在 UI 线程之外处理 Intent,就像IntentService 一样。要保持服务运行,只需从handleMessage中删除stopSelf调用。
如果您可以为每个已处理的 Intent 恢复和保存状态,则第一个解决方案更安全,因为您的 Service 可能会在内存不足的情况下被操作系统杀死。
于 2013-03-18T21:22:50.050 回答