面试记录第十三节——(什么是anr)

一、什么是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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值