如何应对 Android 面试官 -> ANR 如何优化?线上 ANR 如何监控?

前言


在这里插入图片描述

本章主要围绕 ANR 如何监控以及优化;

基本概念


ANR(Android Not Responding) 是指应用程序未响应,Android 系统对于一些事件需要在一定的时间范围内完成,如果超过预订时间未能得到有效响应或者响应时间过长,都会造成 ANR。

ANR 常见类型


input 事件

input事件在5s内没有处理完;

  • logcat关键字:input event dispatching timed out;
  • tag:对于input来说,即便某次事件执行时长超过了timeout时长,只要后续没有再生成输入事件,则不会发生anr;

Input 的超时机制与其他不同,对于 input 事件来说即便某次事件执行时间超过了 timeout 时长,只要用户后续再没有生成输入事件,则不会触发 ANR;

broadcast事件

  • 前台广播:10s内没有处理完;
  • 后台广播:60s内没有处理完;

logcat关键字:timeout of broadcast BroadcastRecord

service事件

  • 前台service:20s内没有处理完;
  • 后台service:200s内没有处理完;

logcat关键字:timeout executing service;

provider 事件

10s内没有处理完;

logcat关键字:timeout publishing content provider;

ANR 出现的原因


  • 主线程进行耗时的 IO 操作;
    • 例如数据库读写
    • 网络操作
    • 序列化
    • 文件读写
    • sp 操作
  • 多线程操作的死锁,导致主线程被block;
    • traces.txt中的关键字:held mutexes / held by
  • 系统资源被耗尽(管道 CPU IO);
  • 主线程被 binder,对端 block;
    • binder 通信默认是同步的,也可以异步实现,如果同步通信的时候,如果对端被 block 之后,导致主端就会无限等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值