性能优化系列之ANRs

和你一起终身学习,这里是程序员Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

本篇文章主要介绍 Android 开发中的 ANR 部分知识点,通过阅读本篇文章,您将收获以下内容:

1.ANR 是什么

1.ANR 是什么

ANR 是Application Not Responding的简称。

当Android应用程序的UI线程被阻止时间太长时,将触发“应用程序无响应”(ANR)错误。如果应用程序位于前台,则系统会向用户显示一个对话框,如图1所示。ANR对话框使用户有机会强制退出该应用程序。

640?wx_fmt=other

图1.向用户显示的ANR对话框

ANR是一个问题,因为负责更新UI的应用程序主线程无法处理用户输入事件或绘制,从而使用户感到沮丧。有关应用主线程的更多信息,请参阅进程和线程。

发生以下情况之一时,将为您的应用触发ANR:

  • 当您的活动处于前台时,您的应用BroadcastReceiver在5秒钟内未响应输入事件或(例如按键或屏幕触摸事件)。

  • 虽然前台没有活动,但是您BroadcastReceiver还没有在相当长的时间内完成执行。

如果您的应用遇到ANR,则可以使用本文中的指导来诊断和解决问题。

2. 检测和诊断问题

Android提供了多种方法来让您知道您的应用存在问题,并帮助您进行诊断。如果您已经发布了应用程序,则Android vitals可以提醒您发生问题,并且有诊断工具可以帮助您发现问题。

Android vitals

当您的应用程序展示出过多的ANR时 ,Android生命体可以通过Play控制台提醒您,从而提高应用程序的性能 。在以下情况下,Android vitals认为ANR过多:

  • 在每天至少0.47%的时间里展示至少一种ANR。

  • 在每天至少0.24%的时间内展示2个或更多ANR。

一个日常的会话是指在使用你的应用程序的日子。

有关Google Play如何收集Android生命数据的信息,请参阅 Play控制台文档。

3.诊断ANR

诊断ANR时,需要寻找一些常见的模式:

  1. 该应用程序正在执行涉及主线程上I / O的慢速操作。

  2. 该应用程序正在主线程上进行长时间的计算。

  3. 主线程正在对另一个进程进行同步调用,而另一个进程要花很长时间才能返回。

  4. 主线程被阻塞,等待另一个线程上正在进行的长时间操作的同步块。

  5. 主线程与另一个线程处于死锁状态,无论是在您的进程中还是通过绑定程序调用。主线程不仅等待长时间的操作完成,而且处于死锁状态。有关更多信息,请参见 Wikipedia上的死锁。

以下技术可以帮助您找出导致ANR的原因是哪些。

StrictMode

使用StrictMode有助于您在开发应用程序时在主线程上查找意外的I / O操作。您可以StrictMode在应用程序或活动级别使用。

启用后台ANR 弹窗

仅当在设备的“ 开发人员”选项中启用了“ 显示所有ANR”时,Android才会为需要花费太长时间才能处理广播消息的应用程序显示ANR对话框。因此,并非总是向用户显示后台ANR对话框,但是该应用仍可能遇到性能问题。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值