Android应用程序无响应(ANR)
我有一个android应用程序,它监听服务器的套接字,以json格式检索数据,并将数据保存在数据库中。资源游标适配器用于在列表中显示数据。当应用程序空闲10分钟或更长时间时,它不会重新发送。有解决方案吗?如果应用程序无法响应用户输入,则会显示ANR。根据Google文档,您不应在UI线程上执行该工作。我建议您在工作线程而不是UI线程中执行网络请求或长时间运行的操作。更多情况下,当Android检测到系统无法响应用户输入超过几秒钟时,会发生ANRAndroid应用程序无响应(ANR),android,android-anr-dialog,Android,Android Anr Dialog,我有一个android应用程序,它监听服务器的套接字,以json格式检索数据,并将数据保存在数据库中。资源游标适配器用于在列表中显示数据。当应用程序空闲10分钟或更长时间时,它不会重新发送。有解决方案吗?如果应用程序无法响应用户输入,则会显示ANR。根据Google文档,您不应在UI线程上执行该工作。我建议您在工作线程而不是UI线程中执行网络请求或长时间运行的操作。更多情况下,当Android检测到系统无法响应用户输入超过几秒钟时,会发生ANR CursorWindow﹕ Window is f
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()
您需要关闭光标。
ANR
在主线程被阻塞一段时间时发生。具体来说,在活动中为5秒,在广播接收器中为10秒,在服务中为20秒。因此,为了避免ANR,您需要确保在UI线程中不会执行类似的操作:读取或写入文件
,连接internet
,操作数据库
等等,这些操作会花费大量时间。所以,如果你想做上面的事情,你可以开始一个新的线程来做。具体来说,AsyncTask
ThreadHandler
等等
我希望这对你有帮助 您的DB光标似乎已满。保存光标中的数据后,关闭光标,将其设置为null,然后创建一个新的光标,以便在内存中不保留任何缓冲区
你的代码和日志在哪里???我编辑了问题以附加日志。信息不准确和杂项。在主要活动的简历上,我将两个异步任务称为backHi,我记得在Android文档中读到了类似的内容,但我再也找不到了,你能给我发送链接吗?@dmarin链接在这里:谢谢,但它不再提到20秒的时间service@dmarin如果您在源代码中查找,您将看到
//我们等待服务完成执行的时间。静态最终整型服务\u超时=20*1000;//我们等待服务完成执行的时间。静态最终整型服务\u后台\u超时=服务\u超时*10代码>在第90~94行。在ActivityManagerService
的第1783~1791行中,您将看到mHandler.sendmagesdelayed(nmsg,ActiveServices.SERVICE\u TIMEOUT)代码>