我一直在寻找完美的Android应用程序架构,并阅读了有关此主题的一些很棒的博客帖子。Android UI组件的事件总线和生命周期
1)http://www.mdswanson.com/blog/2014/04/07/durable-android-rest-clients.html
2)http://birbit.com/a-recipe-for-writing-responsive-rest-clients-on-android/
两个职位描述如何利用事件总线的Android部件(活动,片段,服务)之间的通信。
其中一个,但非常重要的话题没有涉及。如何处理在UI组件被暂停时发布的事件。
例如:服务在完成将数据下载到活动时发布事件。此时活动暂停。当事件总线正在onPause()中注销时,我们完全失去了这个事件。
来自greendao的EvenBus提供stickyevents。但是如果不删除它们可能会导致内存泄漏。
奥托从广场引入了“生产者”模式,它可以用来代替粘性事件。
如果不手动删除粘性事件,则第一种解决方案可能导致内存泄漏。
第二个要求将数据保存到某个位置,直到Producer方法将其返回给订阅者。这个解决方案似乎更加正确,但需要编写更多的代码。
任何人都可以请分享想法如何解决这个边缘情况?任何清洁解决方案
这是我也想知道的东西。你有没有找到满意的答案呢? – stefs 2015-07-06 21:19:02
我试图自己解决这个问题。我创建了一个应用程序调解器对象(对于较大的应用程序,这可以分解为多个调解器),调解器对象对可用的活动有一个弱引用,该活动在resume和pause中设置并取消设置。当调度事件时,调解器接收事件,将结果保存到会话数据缓存中,然后将响应事件的命令排队,该事件将立即执行或恢复有效活动。我很乐意听到任何人解决这个问题。 – serenskye 2015-09-03 16:09:43