Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 适合Android中小型应用的离线数据库接口_Java_Android_Multithreading_Sqlite_Android Asynctask - Fatal编程技术网

Java 适合Android中小型应用的离线数据库接口

Java 适合Android中小型应用的离线数据库接口,java,android,multithreading,sqlite,android-asynctask,Java,Android,Multithreading,Sqlite,Android Asynctask,我知道这里有很多与这个主题相关的线程,但我还没有读到我的问题的真正答案,其中很多都是从2010年开始的,当时似乎没有太多的重点放在让任务远离UI线程上 我需要做一个足够密集的数据库查询,它会导致UI响应明显延迟(在我的S5上,所以在很多手机上会更糟糕)。我想将查询推送到另一个线程。我一直在使用ASyncTask,但我了解到ASyncTask和屏幕旋转、中断应用程序和内存泄漏等问题。我在任何地方看到的建议都是使用游标加载程序,但它的构造函数需要Uri,因为它是为内容提供商设计的。对于我的应用程序来

我知道这里有很多与这个主题相关的线程,但我还没有读到我的问题的真正答案,其中很多都是从2010年开始的,当时似乎没有太多的重点放在让任务远离UI线程上

我需要做一个足够密集的数据库查询,它会导致UI响应明显延迟(在我的S5上,所以在很多手机上会更糟糕)。我想将查询推送到另一个线程。我一直在使用ASyncTask,但我了解到ASyncTask和屏幕旋转、中断应用程序和内存泄漏等问题。我在任何地方看到的建议都是使用游标加载程序,但它的构造函数需要Uri,因为它是为内容提供商设计的。对于我的应用程序来说,内容提供商似乎不仅有点过火,而且谷歌的内容提供商教程页面特别声明“如果完全在您自己的应用程序中使用SQLite数据库,您不需要提供商。”

所以我的问题是ASyncTask和内容提供者之间有什么区别?内部数据库是否有CursorLoader的实现?也许是ASyncTask更健壮的实现

我一直在使用ASyncTask,但我了解到ASyncTask和屏幕旋转、中断应用程序和内存泄漏等问题

AsyncTask
的正确使用有点棘手。有一个be(例如,模型片段)会有所帮助

内部数据库是否有CursorLoader的实现

没有一种效果好。我这样说是因为我已经写了一篇文章(后来又被弃用了)

也许是ASyncTask更健壮的实现

并不是说
AsyncTask
需要“更健壮”,而是您必须意识到它的各种问题。例如,自诩的
游标加载程序
使用
异步任务

在一天结束时,
AsyncTask
所做的就是使用线程池中的后台线程,并将通信传递回主应用程序线程,以获得工作结果。有许多方法可以达到相同的目的。目前,我喜欢使用(或者一个线程池中的线程,如果可能有很多同时发生的事件的话)与。除此之外,您还可以:

  • 使用带有
    处理程序的普通线程
  • 视图上使用带有
    post()
    的普通线程
  • 活动上使用带有
    runOnUiThread()
    的普通线程
所有这些都假设这项工作是合理的短期和一次性的,就像你的情况一样。对于更长和/或更少的一次性工作,如果工作可能需要几十秒或更长时间,请使用
IntentService


但是,所有这些仍然存在问题,在某些情况下,这些问题与
AsyncTask
本身存在的问题相同(例如,正确处理配置更改)。没有“银弹”。

您可能希望创建一个服务并使用队列驱动该服务(这样可以减少连接到数据库的设置量)。谢谢。就在我发布这篇文章之后,我发现了一篇关于在保留片段中使用AsyncTask的文章,我认为这会很好地工作。我曾研究过总线实现,但对于一个数据库查询来说,它似乎过于复杂。