ANR的原因和避免

原因:

1、主线程中超时、访问网络、io、数据库等
2、BroadcastTimeout 10s
3、ServiceTimeout 20s
4、主线程 KeyDispatchTimeout 5s
5、客户端使用binder机制调用服务端方法时,耗时就长(binder机制:https://www.jianshu.com/p/04a034cbbc27)
6、内存不足 泄露
7、io频繁
8、cpu资源紧张
9、gc

避免:

1、使用子线程
2、BroadcastReceiver要执行耗时操作时应启动一个service,将耗时操作交给service来完成。
3、延迟执行io和计算操作

调查并解决ANR

1、首先分析log
2、从trace.txt文件查看调用stack.
3、看代码
4、仔细查看ANR的成因(iowait?block?memoryleak?)

你可能感兴趣的:(ANR的原因和避免)