# ANR

<https://developer.android.com/topic/performance/vitals/anr.html#identify_the_problem>

<https://developer.android.com/training/articles/perf-anr.html?hl=zh-cn>

<http://droidyue.com/blog/2015/07/18/anr-in-android/>

## 官方列的主要可能原因

这些常见的形式导致ANR：

1. 该应用程序是在主线程在做涉及 I/O 慢操作。（**主线程做慢I/O操作**）
2. 该应用程序中耗时计算做在主线程中。（**主线程做耗时计算**）
3. 主线程正在做一个同步调用跨进程，以及此进程需要很长时间才能返回。（**主线程做binder等待返回的耗时同步binder跨进程任务**）
4. 主线程被阻塞等待对于被另一个线程上发生长时间操作同步的块。（**主线程等待别一个线程执行耗时操作同步代码块**）
5. 他主线程与另一个线程死锁，无论是在你的过程中，或通过粘合剂电话。主线程不只是等待很长的操作完成，但在死锁的情况。欲了解更多信息，请参见 死锁维基百科。（[**死锁**](https://en.wikipedia.org/wiki/Deadlock)**、死循环等**）
