使用像Otto或EventBus这样的事件库是推荐的方式来处理Activities,Fragments和后台线程之间的关系
在大多数情况下,在处理案件时
- 用户线程(
AsyncTask
)执行后台处理 - 将计算结果传回给
Activity
或Fragment
-
Activity
或Fragment
重新创build可能发生在用户线程完成其后台处理之前
到目前为止,从许多可靠的来源,我可以看到推荐的方式是使用Retained Fragment
来源
- 最佳实践:定位更改期间的AsyncTask
- http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html
- http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
有时我会听到事件总线库对处理活动,碎片和后台线程之间的关系很有帮助。 (请参阅https://github.com/greenrobot/EventBus 。它指出, 活动,片段和后台线程performance良好 )
我遇到了一些非常受欢迎的事件公交图书馆
- EventBus
- 玫瑰油
我想知道什么时候来处理Activities,Fragments和后台线程之间的关系,Event Bus如何与Retained Fragment方法有所不同?
哪种方式是推荐的方法?
事件总线和Otto不是Android开发者指南的“推荐方式”,主要是因为它们是第三方库来简化任务。 我相信奥托是相当新的,所以老导游显然不使用它。
我个人喜欢Otto,这是我使用的,迄今为止我没有任何问题。 但是,当然,这是因为它适合我的使用情况。
我有一个关于如何在这里使用Otto的例子。
我想知道什么时候来处理Activities,Fragments和后台线程之间的关系,Event Bus如何与Retained Fragment方法有所不同?
哪种方式是推荐的方法?
我想你误解了两个概念:
1)当你旋转你的设备时,防止任务重复创build
2)从线程发送消息到活动或从服务到片段或…
当我们把一个任务放到一个片段中时 ,如果我们正在旋转,我们不想再次启动它。 此外,我们希望从它得到的结果,例如我们想要更新一个imageView,但如果你传递一个imageView到一个asynctask,然后你旋转你的设备,如果你把imageView作为一个弱引用存储,那么你的imageView是空的后,破坏,如果你把它作为一个强大的参考,那么你泄漏的活动。 所以更好的想法是把它放在一个片段中,并将视图存储为一个弱引用,如果活动onCreate被称为更新引用。
EventBus和Otto是在任何组件或线程之间发送消息的非常好的库。 你可以使用这些或Android本地解决scheme,如创build接口或localBroadcastManager或处理程序。
事件总线如何与保留片段方法不同?
我没有看过那些源代码,但我认为他们创build了一个单例队列对象,并将其存储在其中,并将它列入队列以将消息传递给其监听器。