Service + BroadcastReceiver对vs Loader / AsyncTaskLoader

时间:2015-08-17 14:26:37

标签: android service broadcastreceiver loader

是否存在AsyncTaskLoader比Service + BroadcastReceiver对更合适的情况?或者在这个意义上是一个多余的装载机?在游标的情况下,使用Service + ContentProvider对而不是加载器并不总是更好吗?我试图看看装载机是否对于机器人是必要的,或者它是否只是存在但是它的用处最多是多余的。所以基本上,它们是否重要,在什么情况下它们最适合工作而不是任何其他对象?

1 个答案:

答案 0 :(得分:5)

加载器提供缓存。使用加载器时,通常更容易使用UI(尤其是屏幕旋转),因为LoaderManager已连接到活动,即内存泄漏没有问题。

考虑这种情况:您开始加载数据然后旋转设备。在这种情况下,将重新创建活动。你会如何处理Service + BroadcastReceiver?您将不得不要求您的服务在轮换后为您提供数据,并且它将通过广播意图发送它,假定您必须首先序列化您的数据。进入Parcelable。如果您需要一组对象,您可能必须先绑定到该服务。 如果使用了加载器,则在自动调用屏幕旋转onLoadFinished后,将从缓存中获取数据。我认为这比Service更方便。

加载程序支持内容观察者。您可以创建内容观察器,监视基础数据中的任何更改并在需要时触发加载器。这也是一种非常强大的机制,可让您使数据保持最新状态。您可以在使用Service时手动实现此功能,但我认为在此处使用加载程序更方便。

要回答您的问题,不,装载机不是必需的,您可以随时用其他解决方案替换它们。但它们非常便于加载数据,因为它们的生命周期与UI组件相关联,并且它们提供了一些有用的API。