一 . ANR : Application Not Responding

应用程序的响应性是由Activity Manager和 WindowManager系统服务监视的,当监视到在一定时间内无法完成时就会报ANR.

二 .那些操作是在主线程里面进行的:

  1. Activity的所有生命周期回调都是执行在主线程的.
  2. Service默认是执行在主线程的.
  3. BroadcastReceiver的onReceive回调是执行在主线程的.

  4. 没有使用子线程的looper的Handler的HandleMessage, post(Runnable)是执行在主线程的.

  5. AsyncTask的回调中除了doInBackground,其他都是执行在主线程中.

三 .如何避免ANR

  1. 使用AsyncTask处理耗时的IO操作.

  2. 使用Thread或者HandlerThread提供优先级.

  3. 使用handler来处理工作线程的耗时任务,在子线程里面处理完后发消息给UI现在进行更新UI

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

results matching ""

    No results matching ""