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.setThreadPriortity(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然不会降低程序响应,因为默认Thread的优先级和主线程相同
  • 使用Handler处理工作线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程
  • Activity的onCreate和onResume回调中尽量避免耗时的代码
  • BroadcastReceiver中onReceive代码也要尽量减少耗时,建议使用IntentService处理

猜你喜欢

转载自blog.csdn.net/u010844304/article/details/84783714
ANR