ANR(Application Not Responding,设备无响应)定位和问题所在

    xiaoxiao2026-08-24  4

    如何定位ANR

    如果是在开发机器上出现问题,我们可以通过查看/data/anr/traces.txt即可,最新的ANR信息在最开始部分。

    列举几种容易出现的问题

    主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。

    主线程中存在耗时的计算

    主线程中错误的操作,比如说,Thread.wait或者Thread.sleep等,Android系统会监控程序的相应状况,一旦出现上面两种情况,则会弹出ANR对话框

    用户在5秒内未响应用户的输入时间(如按键或者触摸)

    BroadcastReceiver未在10秒内完成相关的处理

    Service在特定的时间内无法处理完成 20秒

    使用AsyncTask处理耗时IO操作。

    使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREADPRIORITYBACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。

    使用Handler处理工作线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程。

    Activity的onCreate和onResume回调中尽量避免耗时的代码

    BroadcastReceiver中onReceive代码也要尽量减少耗时,建议使用IntentService处理。

    转载请注明原文地址: https://ju.6miu.com/read-1311507.html
    最新回复(0)