我试图使用 Activity-Service-Messenger 的模式来传达我的 Activity 和 Service。(就像这里解释的http://viktorbresan.blogspot.mx/2012/09/intentservice-and-inter-process.html)基本上它说我应该在我的Activity中创建一个处理程序,然后创建一个Messenger并通过发送它putExtra() 到我的服务。然后,服务将使用 Messenger 向活动发布消息。
我的问题是,如果我旋转模拟器,与 Messenger 关联的处理程序会持有对已破坏活动的引用。这导致不刷新新活动的界面。我试图将 Messenger 放入 onSaveInstanceState()。如果我可以保存 Messenger,处理程序仍在引用我过去的活动,我无法找到从 Messenger 检索我的处理程序以设置新活动的方法。
编辑:
我避免使用:
android:configChanges="orientation|keyboardHidden"
onRetainNonConfigurationInstance()
编辑:
我使用了 HalR 的想法,即使用单例并将处理程序保留在那里。它工作得非常好,虽然我可以看到这种模式意味着仔细清理单例上的引用。
最后,我还测试了使用 Hoan Nguyen 评论的 Activity-Service 的想法