1

我试图使用 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 的想法

4

2 回答 2

1

我不确定它是否适合这种情况,但是有很多人因为在旋转时失去活动而感到沮丧,或者每次获得新活动时都必须设置复杂的东西。

有些人会创建他们用于引用的单例,然后将处理程序保留在那里。

其他人将扩展应用程序类并将东西放在那里。如果你有很多复杂的东西想要设置一次,这些都是你可以使用的技术。

保持你的应用程序流畅,让你的活动彼此独立是一种更好的整体理念,所以最好避免任何全球性的事情,但有时你必须做你必须做的事情。

于 2013-05-12T16:14:20.930 回答
0

根据生命周期,旋转设备至少会暂停和恢复您的活动。我想你知道后果。也许停止和启动一项新服务是这里唯一正确的解决方案。我在全局状态下工作得也很好,但是当你让每个活动像“单个应用程序”一样独立时,它总是会更容易。

编辑:好的,它是一个信使服务......所以停止和启动不是一个解决方案。所以也许你可以注册和注销你的信使。

于 2013-05-12T16:27:31.933 回答