问题 在Android中使用Asynctask的加载器有什么优势?


加载器优于异步任务有什么优势吗?此外,如何使装载程序与Android froyo手机兼容。

编辑:

这里的主要问题是我没有使用本机DB(SqlLite)。在开发服务器上使用DB。显然,我不能用 CursorLoader 再也没有。 AsyncTaskLoader 没有任何例子。如果有的话,请做链接。

将所需数据加载到本地数据库然后使用它进行查询是否是一个更好的主意 CursorLoader


992
2018-01-31 10:39


起源

也许您没有在应用程序内部实现本机数据库。但是你在查询设备本身的数据(即音乐,照片,联系人,日历等)吗?如果是这样,那么你仍然可以使用CursorLoader。 - Igor Ganapolsky


答案:


是的,装载程序比AsyncTask更有优势,因为它们可以处理很多AsyncTask不足的问题。

  1. AsyncTask中的屏幕方向更改很困难。我曾经遇到过这样的问题,直到我使用了一个Activity Control类,我曾经在配置改变时保留它。如果你想知道如何,我可以给你一些代码。但是,当您在整个数据加载之前更改了方向倍数时,应用程序过去会崩溃。这里的秘密不是用你的第一个线程加载大量数据,而是尽快完成你的线程任务。即使它发生在后台,Android也有一种处理线程的破旧方式。你永远不知道什么时候你的任务会被杀死。

  2. 即使您使用AsyncTaskLoader,也要确保使用活动管理器。这将帮助您更好地控制活动和AsyncTask。

是的,它与所有旧版Android都兼容。您需要包含支持库(大多数情况下,默认包含它,但它总是很好的仔细检查。)


10
2018-03-31 16:56



+1 AsyncTasks可能会变得令人讨厌。看到 这个 - slezica


首先,加载器更容易编码(它们几乎内置于Fragments中)。 Loaders(特别是CursorLoader)也为您处理游标(就像弃用的manageQuery一样)。

看看这个 链接 阅读如何使用装载机前蜂窝。


1
2018-01-31 10:46





实现起来更简单,并且需要处理许多以前必须使用AsyncTasks“手动”完成的生命周期管理。看到这个答案  进一步的细节。

关于将它们与Froyo一起使用,它们可以通过兼容性库获得。


1
2018-01-31 10:51



这里的问题是我没有处理原生数据库。从开发服务器查询它。怎么可能使用CursorLoader? - Hick
刚刚注意到你更新了你的问题,你在这里查看了AsyncTaskLoader示例吗? developer.android.com/reference/android/content/... - Kingamajick


似乎没有人在谈论装载机的缺点!我目前正在开发一个在后台运行其他服务的系统。

我注意到的是,一旦带有装载机的屏幕恢复。加载程序使用的游标会锁定数据库。

它可能不对大多数人开放,但是来自sqlite的getDatabaseWriter实际上是一个同步方法,因此加载器使用的游标永远不会关闭,直到加载器被重置或终止,从而锁定对DB的访问。

我不建议在这些情况下使用加载器,当结果集包含少于100个静态但似乎永远不会改变的项目时,我也不建议使用加载器。


1
2018-01-28 12:02





加载器的另一个优点是它们可以优雅地处理屏幕转向事件,而asynctask可以给您带来麻烦。


0
2018-01-31 11:03





最大差异:

CursorLoader 会在相关时尽快更新您的用户界面内容 ContentProvider 改变其内容(比如说 Service),同时 AsyncTask 只会在您说出时更新您的用户界面。


0
2017-10-21 15:34