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

时间:2012-01-31 10:39:08

标签: android android-asynctask android-cursorloader android-loader

Loader比Async任务有什么优势吗?此外,如何使装载机与兼容Android手机的手机兼容。

编辑:

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

将所需数据加载到本地数据库然后使用CursorLoader进行查询是否更好?

6 个答案:

答案 0 :(得分:10)

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

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

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

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

答案 1 :(得分:1)

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

查看此link,了解如何在Honeycomb之前使用Loaders。

答案 2 :(得分:1)

更简单的实现和处理许多生命周期管理,以前必须使用AsyncTasks“手动”完成。有关详细信息,请参阅此question的答案。

关于在Froyo中使用它们,它们可通过兼容性库获得。

答案 3 :(得分:1)

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

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

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

最大差异:

CursorLoader会在相关ContentProvider更改其内容(通过Service)后更新您的用户界面内容,而AsyncTask只会在您更新用户界面时更新告诉它。