Android 当活动重新启动时,从意向服务重新连接Messenger

Android 当活动重新启动时,从意向服务重新连接Messenger,android,android-activity,restart,intentservice,messenger,Android,Android Activity,Restart,Intentservice,Messenger,我正在开发一个与服务器上的视频同步的应用程序。它启动一个IntentService,下载播放列表,将其插入数据库,然后将实际视频文件下载到sd卡 在启动服务时,我使用通过intent传递的messenger来反馈已下载的百分比 我可以工作,但很明显,当活动被破坏并重新开始时,messenger不会重新连接 这个问题的解决办法是什么,请引导我进入正确的方向。谢谢如果您想使用messenger,您需要保留对使用传递给intent服务的messenger创建的处理程序的引用 如果活动被销毁并重新创建,

我正在开发一个与服务器上的视频同步的应用程序。它启动一个IntentService,下载播放列表,将其插入数据库,然后将实际视频文件下载到sd卡

在启动服务时,我使用通过intent传递的messenger来反馈已下载的百分比

我可以工作,但很明显,当活动被破坏并重新开始时,messenger不会重新连接


这个问题的解决办法是什么,请引导我进入正确的方向。谢谢

如果您想使用messenger,您需要保留对使用传递给intent服务的messenger创建的处理程序的引用

如果活动被销毁并重新创建,则该处理程序仍绑定到上一个活动(这也可能导致泄漏)

一种方法是在单例对象或应用程序对象内引用该处理程序

但是,由于intentservice的异步性质,我要做的是通过广播通知进度,因此新活动可能会注册到intentservice抛出的同一广播中。您永远不知道该服务是否仍然存在或已完成其工作


使用可能会产生更有效的解决方案。

事实上,我最初的想法是通过意图进行沟通,但这是我第一次进行这种沟通,谷歌搜索到messenger可以用于此目的,它似乎更适合。顺便问一下,这两者之间有什么性能差异吗?我什么时候应该改用messenger?ThanksI会说,信使更适合于经典意图,它们在执行任务时不会完成(至少在默认情况下不会)。在这种情况下,您可以向服务的唯一实例提供一个新的messenger,再次发送呼叫“startService”。新messenger将再次调用唯一服务的onStart命令。另一方面,IntentServices必须被视为一次性任务执行者,在完成任务时过期。从性能的角度来看,我想说,如果按照我在回答中的建议使用本地广播,会有一些不同。好的,谢谢,还有一件事我想问一下,我可以使用本地广播多久广播一次?假设每0.01%更新一次,即在一两分钟内更新10000次,这样还可以吗?