【发布时间】:2014-08-09 12:18:46
【问题描述】:
我知道这里有很多与此主题相关的主题,但我还没有阅读我的问题的真正答案,其中很多是从 2010 年开始的,当时似乎没有那么强调让任务脱离 UI 线程。
我需要进行一个足够密集的数据库查询,它会导致 UI 响应明显延迟(在我的 S5 上,所以在很多手机上会更糟)。我想将查询推送到另一个线程。我一直在使用 ASyncTask 这样做,但我了解到 ASyncTask 存在问题,以及屏幕旋转、中断应用程序和内存泄漏等问题。我到处看到的建议是使用 CursorLoader,但其构造函数需要 Uri,因为它是为内容提供者设计的。不仅内容提供者对我的应用程序来说似乎有点矫枉过正,而且谷歌的内容提供者教程页面特别指出“如果完全在你自己的应用程序中使用 SQLite 数据库,你不需要提供者来使用 SQLite 数据库。”
所以我的问题是,如果有的话,ASyncTask 和内容提供者之间存在什么?是否有用于内部数据库的 CursorLoader 实现?也许是 ASyncTask 的更强大的实现?
【问题讨论】:
-
您可能希望创建一个服务并使用队列驱动该服务(这样可以减少连接到数据库的设置量)。
标签: java android multithreading sqlite android-asynctask