Loaders 与 Async 任务相比有什么优势吗?此外,如何使装载机与 Android froyo 的手机兼容。
编辑:
这里的主要问题是我没有使用本机 DB(SqlLite)。在开发服务器上使用数据库。显然,我不能再使用CursorLoader
了。AsyncTaskLoader
根本没有例子。如果有,请做链接。
将所需的数据加载到本地数据库然后使用查询它是一个更好的主意CursorLoader
吗?
Loaders 与 Async 任务相比有什么优势吗?此外,如何使装载机与 Android froyo 的手机兼容。
编辑:
这里的主要问题是我没有使用本机 DB(SqlLite)。在开发服务器上使用数据库。显然,我不能再使用CursorLoader
了。AsyncTaskLoader
根本没有例子。如果有,请做链接。
将所需的数据加载到本地数据库然后使用查询它是一个更好的主意CursorLoader
吗?
是的,Loader 比 AsyncTask 更有优势,因为它们处理了很多 AsyncTask 缺乏的事情,悲惨地。
在 AsyncTask 中很难更改屏幕方向。我曾经遇到过这样的问题,直到我使用了一个 Activity Control 类,我曾经在配置更改时保留它。如果你想知道怎么做,我可以给你一些代码。但是,当您甚至在整个数据加载之前多次更改方向时,该应用程序就会崩溃。这里的秘诀是不要用你的第一个线程加载大量数据,并尽快完成你的线程任务。即使它发生在后台,Android 处理线程的方式也很简陋。您永远不知道您的一项任务何时会被杀死。
即使您使用 AsyncTaskLoader,请确保您使用的是 Activity 管理器。这将帮助您更好地控制活动和 AsyncTask。
是的,它兼容所有旧版本的 Android。您需要包含支持库(大多数情况下,这是默认包含的,但仔细检查总是很好。)
一方面,加载程序更容易编码(它们几乎内置在 Fragments 中)。加载器(特别是 CursorLoader)还为您处理光标(如已弃用的 manageQuery)。
查看此链接以了解如何使用加载器 pre-Honeycomb。
以前必须使用 AsyncTasks “手动”完成的许多生命周期管理更易于实现和处理。有关更多详细信息,请参阅此问题的答案。
关于将它们与 Froyo 一起使用,它们可通过兼容性库获得。
似乎没有人在谈论装载机的缺点!我目前正在开发一个在后台运行其他服务的系统。
我注意到的是,一旦恢复带有加载程序的屏幕。加载程序使用的游标锁定了数据库。
它可能对大多数人不开放,但来自 sqlite 的 getDatabaseWriter 实际上是一个同步方法,因此加载器使用的游标在加载器重置或终止之前永远不会关闭,从而锁定对数据库的访问。
我不建议在这些情况下使用加载器,也不建议在您的结果集包含少于 100 个静态且似乎永远不会更改的项目时使用加载器。
loader 的另一个优点是它们可以优雅地处理屏幕翻转事件,而 asynctask 会给你带来麻烦。
最大的区别:
CursorLoader
将在其相关ContentProvider
内容更改时立即更新您的 UI 的内容(例如通过 a Service
),而AsyncTask
只会在您告诉它时更新您的 UI。