Java 适合Android中小型应用的离线数据库接口
我知道这里有很多与这个主题相关的线程,但我还没有读到我的问题的真正答案,其中很多都是从2010年开始的,当时似乎没有太多的重点放在让任务远离UI线程上 我需要做一个足够密集的数据库查询,它会导致UI响应明显延迟(在我的S5上,所以在很多手机上会更糟糕)。我想将查询推送到另一个线程。我一直在使用ASyncTask,但我了解到ASyncTask和屏幕旋转、中断应用程序和内存泄漏等问题。我在任何地方看到的建议都是使用游标加载程序,但它的构造函数需要Uri,因为它是为内容提供商设计的。对于我的应用程序来说,内容提供商似乎不仅有点过火,而且谷歌的内容提供商教程页面特别声明“如果完全在您自己的应用程序中使用SQLite数据库,您不需要提供商。” 所以我的问题是ASyncTask和内容提供者之间有什么区别?内部数据库是否有CursorLoader的实现?也许是ASyncTask更健壮的实现 我一直在使用ASyncTask,但我了解到ASyncTask和屏幕旋转、中断应用程序和内存泄漏等问题Java 适合Android中小型应用的离线数据库接口,java,android,multithreading,sqlite,android-asynctask,Java,Android,Multithreading,Sqlite,Android Asynctask,我知道这里有很多与这个主题相关的线程,但我还没有读到我的问题的真正答案,其中很多都是从2010年开始的,当时似乎没有太多的重点放在让任务远离UI线程上 我需要做一个足够密集的数据库查询,它会导致UI响应明显延迟(在我的S5上,所以在很多手机上会更糟糕)。我想将查询推送到另一个线程。我一直在使用ASyncTask,但我了解到ASyncTask和屏幕旋转、中断应用程序和内存泄漏等问题。我在任何地方看到的建议都是使用游标加载程序,但它的构造函数需要Uri,因为它是为内容提供商设计的。对于我的应用程序来
AsyncTask
的正确使用有点棘手。有一个be(例如,模型片段)会有所帮助
内部数据库是否有CursorLoader的实现
没有一种效果好。我这样说是因为我已经写了一篇文章(后来又被弃用了)
也许是ASyncTask更健壮的实现
并不是说AsyncTask
需要“更健壮”,而是您必须意识到它的各种问题。例如,自诩的游标加载程序
使用异步任务
在一天结束时,AsyncTask
所做的就是使用线程池中的后台线程,并将通信传递回主应用程序线程,以获得工作结果。有许多方法可以达到相同的目的。目前,我喜欢使用(或者一个线程池中的线程,如果可能有很多同时发生的事件的话)与。除此之外,您还可以:
- 使用带有
处理程序的普通线程
- 在
视图上使用带有
的普通线程post()
- 在
活动上使用带有
的普通线程runOnUiThread()
IntentService
但是,所有这些仍然存在问题,在某些情况下,这些问题与
AsyncTask
本身存在的问题相同(例如,正确处理配置更改)。没有“银弹”。您可能希望创建一个服务并使用队列驱动该服务(这样可以减少连接到数据库的设置量)。谢谢。就在我发布这篇文章之后,我发现了一篇关于在保留片段中使用AsyncTask的文章,我认为这会很好地工作。我曾研究过总线实现,但对于一个数据库查询来说,它似乎过于复杂。