Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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
Android 为什么AsyncTask中的rawQuery要慢得多。。?_Android_Sqlite_Android Asynctask - Fatal编程技术网

Android 为什么AsyncTask中的rawQuery要慢得多。。?

Android 为什么AsyncTask中的rawQuery要慢得多。。?,android,sqlite,android-asynctask,Android,Sqlite,Android Asynctask,情况如下: 在我的应用程序中,我有一个用于与其他特殊设备通信的服务。在这个通信过程中,我需要在我的应用程序中查询数据库,以获取数据以与第二设备进行通信。这里我使用带有2个参数的rawQuery。查询并不太复杂,因为我实际上是在数据库中查询视图。因此,我应该返回大约50行和25列 问题是,如果我只是从服务(同一线程)调用这个查询,它会阻塞我的UI大约6秒钟。有一个长时间运行的动画信号卡住了 另一方面,如果我在AsyncTask的doInBackground中调用完全相同的查询(将其从UI线程中移动

情况如下: 在我的应用程序中,我有一个用于与其他特殊设备通信的服务。在这个通信过程中,我需要在我的应用程序中查询数据库,以获取数据以与第二设备进行通信。这里我使用带有2个参数的rawQuery。查询并不太复杂,因为我实际上是在数据库中查询视图。因此,我应该返回大约50行和25列

问题是,如果我只是从服务(同一线程)调用这个查询,它会阻塞我的UI大约6秒钟。有一个长时间运行的动画信号卡住了

另一方面,如果我在AsyncTask的doInBackground中调用完全相同的查询(将其从UI线程中移动),我的动画将顺利运行,但对于相同数量的数据查询,现在需要25秒到1分钟,具体取决于我正在测试的手机。。(使用英特尔cpu与新摩托罗拉进行近1分钟的较量)

我测量时间和损失的时间(因为两部手机上的查询和数据库完全相同),所有这些时间都浪费在第一次访问游标上。在我的例子中,c.moveToFirst()

我的问题更多的是面向Android,而不是SQL,因为在我的应用程序中,我已经集成了完整的、充满数据的数据库

有什么想法吗

编辑:我针对我遇到的问题尝试了不同的解决方案,这里有一件有趣的事情我想到了:当我使用另一个带有Runnable的线程,它有查询功能时,时间会减少到几秒钟(就像在UI线程中执行的一切一样) Thread t=新线程(runnablehichholdquery)//然后我就开始线程t


仍然不确定AsyncTask的行为为何如此。。现在我只是想解释一下,因为我想更好地理解正在发生的事情。。感谢所有有想法的人

您的查询需要读取多少条记录(不返回)?从该视图中选择*将返回大约20000条记录。您是否在WHERE part中的列上使用了索引?请显示您的DB架构和查询。正如我所说的,查询非常简单,如“从myView中选择*其中p=1,b='121'按c排序”。。结果是25列,大约50行@Tomislav我能读懂DB所以它是什么。。没有创建额外的索引。我只是得到数据库并将其集成到应用程序中。据我所知,我正在查询的这个视图上没有索引。