ANR分析

ANR概述

        ANR(Application Not Responding)是指应用程序未响应,Android中一个Activity的执行时间是5秒,超过5秒无响应则会弹出ANR对话框,在一个广播接收者中,最长的执行时间是10秒,在这段时间内可以完成一些操作,若在10秒之内没有完成,则会造成ANR。

造成ANR的主要原因

        要介绍造成ANR的原因,我们首先要了解一下系统是如何知晓应用程序的响应性的。

        应用程序的响应性是由Activity Manager和Windows Manager系统服务来监视的,当出现超时未响应操作,即会造成ANR。

主要原因:

  • 主线程被IO操作(在4.0之后网络IO不允许在主线程中)阻塞
  • 主线程中出现耗时操作

        那么Android中有哪些操作是在主线程中的呢?

  • Activity的所有生命周期回调都是执行在主线程中的
  • Service(服务)默认是执行在主线程中
  • BroadcstReceiver的onReceiver回调是执行在主线程中的
  • 没有使用子线程的looper的Handler的handlerMessage.post(Runnable)是执行在主线程中的。
  • AsyncTask的回调除了doInBackgroud,其他操作均在主线程中执行

如何解决ANR

  • 使用AsyncTask处理耗时IO操作
  • 使用Thread或者HandlerThread提高优先级
  • 使用Handler来处理工作线程中的耗时任务
  • 在Activity的【初始化】onCreate()和【运行时】onResume()回调中尽量避免耗时代码

 

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值