ANR(Application Not Responding)错误在以下两种情况下发生:
l 界面在5秒内没有响应用户的输入事件;
l BroadcastReceiver 在10秒内没有完成所负责的工作。
相关建议:
1. 在 UI 线程中做尽可能少的工作;
2. 在 Activity 的 onCreate 和 onResume 中做尽可能少的工作;
3. 耗时工作放入工作线程,耗时工作包括:网络操作、数据库操作、bitmap的resize等耗时计算工作等;
4. 设置工作线程的优先级为THREAD_PRIORITY_BACKGROUND,使其低于 UI 线程的优先级;
5. 在 BroadcastReceiver 中只做少的不持续的工作,长时间需要执行的工作放入工作线程或交给 IntentService;
6. 若界面更新之前需要进行耗时工作,请用 ProgressBar 等方式提示用户;
7. 在游戏应用中,将移动计算交给工作线程;
8. 使用性能检查工具 Systrace 和 Traceview。
Googler 还在后文中介绍了 JNI 和 SMP(对称多处理器)的知识,待我研究之后再和大家分享,或者如果你迫不及待,可以一尝为快:
http://developer.android.com/training/articles/perf-jni.html
http://developer.android.com/training/articles/smp.html