这个问题已经被问到here但是没有好的答案。
所以基本上我有一个在后台运行的意图服务来做一些事情,一旦完成,我使用resultreceiver将结果发送回活动,所以我需要知道的是:
答案 0 :(得分:4)
这是一个迟到的答案,但我正在研究IntentService
的功能,我遇到了你的问题。
如何在意图服务仍在运行时处理活动被破坏的情况?
由于IntentService
是一个单独的组件,它将继续运行,直到指定给它的任务完成或运行应用程序的进程被销毁。最初的想法可能是在活动被销毁时停止IntentService
。简单,不是吗?嗯,不太好。当你调用stopService(Intent)
时,虽然调用onDestroy()
的{{1}}方法,但后台线程将继续运行直到它完成并将结果传递给接收者。
如何知道活动是否被意图服务销毁?
这是一个很好的问题,我自己也想知道。这里描述了一个简洁的解决方案 - IntentService responding to dead ResultReceiver
当活动已经被销毁时,将结果发送回活动时,结果是什么?这会产生错误吗?
这很可能不会导致任何可见的异常,因为活动不可见。但是,当您对活动中定义的对象进行引用时,它可能会导致配置更改中的内存泄漏(只要线程继续运行,这将阻止活动被垃圾回收 - 请参阅IntentService prevents activity from destroying)。但上面提到的答案可以缓解这个问题,因为它会使IntentService
中ResultReceiver
的引用无效,从而避免任何潜在的内存问题
此外,值得一提的是,您可以考虑onDestroy
的方法,通过注册/取消注册LocalBroadcastManager
,可以更轻松地处理Activity
的生命周期。可用示例here from the google samples repo