面试记录第十三节——(什么是anr)
来源:互联网 发布:五金店软件 编辑:程序博客网 时间:2024/06/05 20:08
一、什么是anr
答:anr就是一个无响应的对话框,主要原因就是在主线程做了耗时操作。
1、如果我们的应用程序有一段时间,点击不够灵敏,系统就会想用户显示一个对话框,而这个对话框的内容就是anr(Application Not Respinding:意思就是用户可等待,程序正在运行,同事你也可以选择关闭)。对于一个良好的、流程的、合理的APP来说,anr是绝对不能出现的。
2、在一个activity当中,最长的执行时间是5秒。如果超出了5秒没有做出相应,它就会出现anr的弹框,而在broadcastReceiver当中,最长的执行时间是10秒。如果超出了10秒同样会造成anr。
二、造成anr的主要原因
答:首先我们要知道,应用程序的响应它是由Activity Manager和WindowManager系统服务监视的。当他监听到Activity和BroadcastRecever中,5秒和10秒中,没有执行完成任务的时候,Android就会弹出anr的对话框,
1、主线程被IO操作阻塞,
2、主线程中存在耗时操作(网络数据的读取等方面)。
三、造成anr的主要原因-Android中那些操作是在主线程
答:
1、Activity的所有声明周期回调都是执行在主线程。
2、Servie默认是执行在主线程。
3、BroadReceiver的onReceive 回调是在主线程执行的。
4、没有子线程的looper的handler的handlerMessage post(Runnable)是执行在主线程 。
5、AsyncTasK中回调中除了doinBackground,其他都是执行在主线程。
四、如何解决anr
答:
1、可以在AnyckTask中处理耗时操作。
2、使用Thread或者HandlerThread提高优先级。
3、使用handler来处理工作线程的耗时任务。
4、activity中的onCreate和onResume回调中尽量避免耗时代码。
阅读全文
0 0
- 面试记录第十三节——(什么是anr)
- 面试记录第二十三节——(java网络编程、BIO/NIO/AI0)
- 面试记录第十一节——(volley框架)
- 面试记录第十八节——(冷启动)
- 面试记录第十四节——(什么是oom)
- Android—什么是ANR 如何避免它?
- Android面试——OOM及ANR
- 第十三节 html5学习——服务器发送事件
- 【Android测试】【第十三节】Uiautomator——项目实战
- 面试记录第十五节——(bitmap释放、lru、三级缓存、图片压缩)
- 什么是ANR
- 什么是ANR
- 什么是 ANR?
- Spark修炼之道(基础篇)——Linux大数据开发基础:第十三节:Shell编程入门(五)
- Spark修炼之道(基础篇)——Linux大数据开发基础:第十三节:Shell编程入门(五)
- Spark修炼之道(高级篇)——Spark源码阅读:第十三节 Spark SQL之SQLContext(一)
- 学习Ajax框架之dojo:第十三节——如何编写自己的dojo widget
- Scala入门到精通——第十三节 高阶函数
- iOS11、iPhone X、Xcode9 适配
- spring mvc+velocity+maven
- WDCP控制面板相关命令
- Java NIO 系列教程
- xlua热更新派生类的方法时,调用其中基类方法
- 面试记录第十三节——(什么是anr)
- 高通apq8074修改DDR频率
- Java多态练习
- js-yield
- 互联网协议入门(一)
- Lua总结
- linux查看系统版本信息命令
- 线程间实现通信
- linux启动优化:mdev -s