使用像Otto或EventBus这样的事件库是推荐的方式来处理Activities,Fragments和后台线程之间的关系

在大多数情况下,在处理案件时

  • 用户线程( AsyncTask )执行后台处理
  • 将计算结果传回给ActivityFragment
  • ActivityFragment重新创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了一个单例队列对象,并将其存储在其中,并将它列入队列以将消息传递给其监听器。

Interesting Posts