我正在尝试使用Activity-Service-Messenger的模式来交流我的Activity和Service。 (如此处http://viktorbresan.blogspot.mx/2012/09/intentservice-and-inter-process.html所述)基本上,它说我应该在Activity中创建一个Handler,然后创建一个Messenger,然后通过putExtra()将其发送到我的Service。然后,服务将使用Messenger来向活动发布消息。

我的问题是,如果我旋转模拟器,则与Messenger关联的Handler会保留对已破坏活动的引用。这将导致不刷新新活动的界面。我试图将Messenger放在onSaveInstanceState()中。如果我可以保存Messenger,则Handler仍在引用我过去的活动,并且我找不到从Messenger检索Handler来设置新活动的方法。

编辑:
我避免使用:
android:configChanges =“ orientation | keyboardHidden”
onRetainNonConfigurationInstance()

编辑:
我使用HalR的想法,即使用单例并将处理程序保留在那里。尽管我可以看到此模式暗示着仔细清除单例上的引用,但它的工作原理确实很好。
最后,我还测试了Hoan Nguyen评论的使用Activity-Service的想法

最佳答案

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

有些人会创建用于引用的单例,然后将Handler保留在其中。

其他人会extend the application class并将东西放在那里。如果您要设置很多复杂的东西,可以使用这些技巧。

保持应用程序的流畅性并使您的活动彼此独立是一种更好的总体理念,因此最好避免全局操作,但有时您必须做自己想做的事情。

关于android - 旋转更改android.os.Messenger和android.os.Handler的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16509316/

10-11 22:14