阻止服务重新启动

时间:2013-03-17 16:44:42

标签: android restart intentservice

我有一个IntentService,它是从带有 startService(service)的BroadcastReceiver启动的。当我在BroadcastReceiver中获得新信息时,新的信息将通过 startService(service)的意图再次推送到IntentService,但随后服务重新启动。我可以阻止这个吗?我想将新信息推送到IntentService而不重述它。

2 个答案:

答案 0 :(得分:1)

意图服务旨在以意图启动,执行其工作并完成。从这个角度来看,它们更像是一个异步。这就是您的intentservice重新启动的原因。

onHandleIntent应该做一些工作并完成。你可以做一些技巧来阻止它,但这会违背意图服务的性质。

你应该做的是拥有一个经典的服务。如果您收到ANR错误,则应在线程内部执行所有时间密集型操作,或者在服务本身内部执行asynctask。

答案 1 :(得分:0)

我假设您需要共享一些状态来处理服务中的后续Intent。我看到两个解决方案:

  1. 使用IntentService并在onHandleIntent中保存并恢复此状态。
  2. 使用已启动的服务,并将此状态保存为Service类中的字段。要防止ANR,请在UI线程之外处理Intent,就像IntentService does一样。要保持服务正常运行,只需从stopSelf
  3. 中删除handleMessage来电

    如果您可以为每个已处理的Intent恢复并保存状态,则第一个解决方案更安全,因为如果内存不足,您的服务可能会被操作系统杀死。