Android应用程序挂起在SQL select查询中

时间:2011-04-01 04:41:06

标签: android sql sqlite

我的程序涉及与SQLite的相互定期交互,在应用程序的开头,我调用了一个查询

mDatabase.rawQuery("SELECT key, 
                           indice as _id
                      FROM Dictionary",null);

奇怪的是,应用程序停止执行此行。如果我正在调试应用程序,这不会发生,但是当我运行应用程序时,控件从此行开始并且永远不会返回。我已经通过在此行之前和之后放置logcat来检查这一点。 我无法理解这种行为。有人可以帮忙吗?

P.S。表Dictionary有超过2000-3000条记录。

编辑: 我试过从UI和&单独的线程。无论哪种方式,执行都会在此调用中停止(对于该线程)。因此,当我从另一个线程调用它时,虽然没有ANR,但调用仍然失败并且无限期地保留线程。

EDIT2: 每次运行应用程序时都不会发生此问题,但10次中有5次。显然,在较弱的手机上会发生更多事情。

3 个答案:

答案 0 :(得分:2)

注意以下几点。

  • 在UI线程以外的单独线程中调用查询。
  • 最大光标可以容纳 1MB 的数据。因此,查询最少量的数据。

答案 1 :(得分:1)

你应该从UI线程中删除它。看起来像一个沉重的电话。任何花费超过5秒并且停止UI线程的东西都会触发ANR。

答案 2 :(得分:0)

是的piyushnp和abhinav是对的。获取详细信息的AsyncTask或Thread是更好的选择。进行后台处理时显示进度条。当您获得查询结果时,将其显示在活动中,或者对查询结果执行您想要的任何处理。

此示例模拟您的问题。 AsyncTask基本示例:AsyncTask