Loader比Async任务有什么优势吗?此外,如何使装载机与兼容Android手机的手机兼容。
编辑:
这里的主要问题是我没有使用本机DB(SqlLite)。在开发服务器上使用DB。显然,我不能再使用CursorLoader
了。 AsyncTaskLoader
根本没有例子。如果有,请做链接。
将所需数据加载到本地数据库然后使用CursorLoader
进行查询是否更好?
答案 0 :(得分:10)
是的,加载器比AsyncTask更有优势,因为它们可以处理很多AsyncTask不足的问题。
AsyncTask中的屏幕方向更改很困难。我以前遇到过这样的问题,直到我使用了一个Activity Control类,我曾经在配置改变时保留它。如果你想知道如何,我可以给你一些代码。但是,当您在整个数据加载之前更改了方向倍数时,应用程序曾经崩溃。这里的秘密不是用你的第一个线程加载大量数据,而是尽快完成你的线程任务。即使它发生在后台,Android也有一种处理线程的破旧方式。你永远不知道什么时候你的任务会被杀死。
即使您使用AsyncTaskLoader,也要确保使用活动管理器。这将帮助您更好地控制活动和AsyncTask。
是的,它在所有旧版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
只会在您更新用户界面时更新告诉它。