我的程序涉及与SQLite的相互定期交互,在应用程序的开头,我调用了一个查询
mDatabase.rawQuery("SELECT key,
indice as _id
FROM Dictionary",null);
奇怪的是,应用程序停止执行此行。如果我正在调试应用程序,这不会发生,但是当我运行应用程序时,控件从此行开始并且永远不会返回。我已经通过在此行之前和之后放置logcat来检查这一点。 我无法理解这种行为。有人可以帮忙吗?
P.S。表Dictionary
有超过2000-3000条记录。
编辑: 我试过从UI和&单独的线程。无论哪种方式,执行都会在此调用中停止(对于该线程)。因此,当我从另一个线程调用它时,虽然没有ANR,但调用仍然失败并且无限期地保留线程。
EDIT2: 每次运行应用程序时都不会发生此问题,但10次中有5次。显然,在较弱的手机上会发生更多事情。
答案 0 :(得分:2)
注意以下几点。
答案 1 :(得分:1)
你应该从UI线程中删除它。看起来像一个沉重的电话。任何花费超过5秒并且停止UI线程的东西都会触发ANR。
答案 2 :(得分:0)
是的piyushnp和abhinav是对的。获取详细信息的AsyncTask或Thread是更好的选择。进行后台处理时显示进度条。当您获得查询结果时,将其显示在活动中,或者对查询结果执行您想要的任何处理。
此示例模拟您的问题。 AsyncTask基本示例:AsyncTask