服务 + BroadcastReceiver 对与 Loader/AsyncTaskLoader
Service + BroadcastReceiver pair vs Loader/AsyncTaskLoader
是否存在 AsyncTaskLoader 比 Service+BroadcastReceiver 对更合适的情况?或者从这个意义上说装载机是多余的吗?在游标的情况下,使用 Service+ContentProvider 对而不是加载程序不是总是更好吗?我正在尝试查看加载器是否是 android 所必需的,或者它是否只是存在但其用处充其量是多余的。所以基本上,它们重要吗?在什么情况下它们比任何其他对象更适合这项工作?
加载程序提供缓存。使用加载程序时,通常更容易使用 UI(尤其是屏幕旋转),因为 LoaderManager
连接到 activity,即不存在内存泄漏问题。
考虑这种情况:您开始加载数据,然后旋转您的设备。 Activity 将在这种情况下重新创建。你会如何用 Service
+ BroadcastReceiver
来处理这个问题?你将不得不要求你的服务在轮换后给你数据,它会通过广播意图发送它,假设你必须先序列化你的数据。例如进入 Parcelable
。如果您需要一组对象,您可能必须先绑定到服务。
如果您使用加载程序,屏幕旋转后 onLoadFinished
将自动调用并从缓存中获取数据。我觉得这个比Service
.
方便多了
加载器支持内容观察器。您可以创建内容观察器来监视底层数据的任何变化并在需要时触发加载器。这也是一种非常强大的机制,可让您使数据保持最新。您可以在使用 Service
时手动实现此功能,但我仍然认为在这里使用加载程序更方便。
回答你的问题,不,加载器不是必需的,你总是可以用其他解决方案替换它们。但是它们加载数据非常方便,因为它们的生命周期与 UI 组件相关,并且它们提供了一些有用的 API 开箱即用。
是否存在 AsyncTaskLoader 比 Service+BroadcastReceiver 对更合适的情况?或者从这个意义上说装载机是多余的吗?在游标的情况下,使用 Service+ContentProvider 对而不是加载程序不是总是更好吗?我正在尝试查看加载器是否是 android 所必需的,或者它是否只是存在但其用处充其量是多余的。所以基本上,它们重要吗?在什么情况下它们比任何其他对象更适合这项工作?
加载程序提供缓存。使用加载程序时,通常更容易使用 UI(尤其是屏幕旋转),因为 LoaderManager
连接到 activity,即不存在内存泄漏问题。
考虑这种情况:您开始加载数据,然后旋转您的设备。 Activity 将在这种情况下重新创建。你会如何用 Service
+ BroadcastReceiver
来处理这个问题?你将不得不要求你的服务在轮换后给你数据,它会通过广播意图发送它,假设你必须先序列化你的数据。例如进入 Parcelable
。如果您需要一组对象,您可能必须先绑定到服务。
如果您使用加载程序,屏幕旋转后 onLoadFinished
将自动调用并从缓存中获取数据。我觉得这个比Service
.
加载器支持内容观察器。您可以创建内容观察器来监视底层数据的任何变化并在需要时触发加载器。这也是一种非常强大的机制,可让您使数据保持最新。您可以在使用 Service
时手动实现此功能,但我仍然认为在这里使用加载程序更方便。
回答你的问题,不,加载器不是必需的,你总是可以用其他解决方案替换它们。但是它们加载数据非常方便,因为它们的生命周期与 UI 组件相关,并且它们提供了一些有用的 API 开箱即用。