Android应用无响应(ANR)

时间:2015-04-01 09:38:58

标签: android android-anr-dialog

我有一个Android应用程序,它从服务器侦听套接字并以json格式检索数据并将数据保存在数据库中。资源游标适配器用于显示列表中的数据。当应用程序闲置10分钟或更长时间时,它不会响应。任何解决方案?

4 个答案:

答案 0 :(得分:14)

主线程被阻塞一段时间后发生

ANR。具体来说,活动中为5秒,BroadcastReceiver中为10秒,服务中为20秒。因此,为避免ANR,您需要确保在您的UI线程中不要执行类似的操作:reading or writing filesconnecting the internetoperating databases等等,花费了大量的时间。所以,如果你想做上面的事情,你可以开始一个新的线程来做到这一点。具体来说,AsyncTask ThreadHandler等等。

我希望这会对你有所帮助。

答案 1 :(得分:1)

当Android检测到系统无法响应用户输入超过几秒钟时,就会发生ANR。

CursorWindow﹕ Window is full: requested allocation 396488 bytes,
free space 285853 bytes, window size 2097152 bytes
04-01 05:32:34.328    1598-1607/com.inxed W/CursorWrapperInner﹕ 
Cursor finalized without prior close()

你需要关闭光标。

答案 2 :(得分:0)

如果应用程序无法响应用户输入,则显示ANR。根据Google文档,您不应该在UI线程上执行工作。我建议您在工作线程而不是UI线程中执行网络请求或长时间运行操作。更多this

答案 3 :(得分:0)

看起来您的数据库光标已满。从光标保存数据后,将其关闭,将其设置为null并创建一个新数据,以便不在内存中保留缓冲区。

this SO answer gives more information