繁体   English   中英

旋转更改android.os.Messenger和android.os.Handler的问题

[英]issue with android.os.Messenger and android.os.Handler with rotation change

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

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

编辑:
我避免使用:
机器人:configChanges = “方向| keyboardHidden”
onRetainNonConfigurationInstance()

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

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

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

其他人将扩展应用程序类并在其中放置内容。 如果您要设置很多复杂的东西,可以使用这些技巧。

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

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

编辑:好的,这是一个Messenger服务...所以停止和启动不是解决方案。 因此,也许您可​​以注册和注销您的Messenger。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM