11

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

编辑:

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

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

4

6 回答 6

10

是的,Loader 比 AsyncTask 更有优势,因为它们处理了很多 AsyncTask 缺乏的事情,悲惨地。

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

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

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

于 2012-03-31T16:56:27.297 回答
1

一方面,加载程序更容易编码(它们几乎内置在 Fragments 中)。加载器(特别是 CursorLoader)还为您处理光标(如已弃用的 manageQuery)。

查看此链接以了解如何使用加载器 pre-Honeycomb。

于 2012-01-31T10:46:30.623 回答
1

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

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

于 2012-01-31T10:51:32.627 回答
1

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

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

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

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

于 2014-01-28T12:02:16.610 回答
0

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

于 2012-01-31T11:03:31.680 回答
0

最大的区别:

CursorLoader将在其相关ContentProvider内容更改时立即更新您的 UI 的内容(例如通过 a Service),而AsyncTask只会在您告诉它时更新您的 UI。

于 2013-10-21T15:34:04.137 回答