情况如下:在我的应用程序中,我有用于与其他特殊设备通信的服务。在此通信过程中,我需要在我的应用程序中查询数据库以获取继续与第二个设备通信所需的数据。在这里,我使用带有 2 个参数的 rawQuery。查询不是太复杂,因为我实际上是在查询数据库中的视图。结果,我应该得到大约50 行和25 列。
问题是,如果我只是从服务(同一个线程)调用这个查询,它会阻塞我的 UI 6 秒。有动画信号长时间操作卡住了。
另一方面,如果我在 AsyncTask 的 doInBackground 中调用完全相同的查询(以将其从 UI 线程中移动),我的动画将毫无问题地流动,但对于相同数量的数据查询现在需要25 秒到1 分钟,具体取决于我正在测试的手机。 . (几乎 1 分钟就可以用 Intel cpu 对付新的摩托罗拉)
我测量时间以及浪费了这么多时间(因为两部手机上的查询和数据库完全相同),所有这些时间都浪费在第一次访问游标上。在我的情况下 c.moveToFirst() ..
我的问题更多的是面向 Android 而不是 SQL,因为在我的应用程序中我已经集成了完整的数据,数据库
有什么想法,有人吗?
编辑: 我尝试了不同的解决方案来解决我遇到的问题,这是我遇到的有趣的事情:当我使用另一个具有查询的 Runnable 线程时,时间减少到几秒钟(就像所有东西都在 UI 线程中执行一样) 线程 t =新线程(RunnableWhichHoldQuery);//然后我就启动线程t。
仍然不确定为什么 AsyncTask 的行为会像它一样..现在我只是想解释一下,因为我想更好地了解发生了什么..感谢每个有想法的人..