Android中ANR分析

作者: HJXANDHMR | 来源:发表于2016-07-01 13:19 被阅读167次

什么是ANR

ANR全称Application Not Responding,意思就是程序未响应。如果一个应用无法响应用户的输入,系统就会弹出一个ANR对话框,如下图所示,用户可以自行选择继续等待亦或者是停止当前程序。

什么会引发ANR

  1. KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在5秒内无响应

  2. BroadcastTimeout(10 seconds) --BroadcastReceiver在10秒内无法处理完成

  3. ServiceTimeout(20 seconds) --Service在20秒内无法处理完成

如何避免ANR

基本的思路就是将IO操作在工作线程来处理,减少其他耗时操作和错误操作

  • 使用AsyncTask处理耗时IO操作。

  • 使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_
    BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。

  • 使用Handler处理工作线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程。

  • Activity的onCreate和onResume回调中尽量避免耗时的代码

  • BroadcastReceiver中onReceive代码也要尽量减少耗时,建议使用IntentService处理。

分析并解决ANR

  1. 首先分析log

  2. 从trace.txt文件查看调用stack.

  3. 看代码

  4. 仔细查看ANR的成因(iowait?block?memoryleak?)

这里有两篇博客关于ANR写的非常详细,感兴趣的可以移步到下面链接去更深入的学习。

相关文章

  • 高通平台LOG目录分析

    高通平台日志目录分析 anr: android(system)日志中搜索“ANR in”关键字, 可以得到信息1、...

  • 记录一次ANR的分析过程

    Android开发中难免碰到ANR问题,但是网上关于ANR的文章并不多,那我就写一篇最近工作中碰到ANR的分析过程...

  • Android中ANR分析

    什么是ANR ANR全称Application Not Responding,意思就是程序未响应。如果一个应用无法...

  • Android 抓取 ANR 日志终极办法

    在 Android 开发中,有时会遇到 ANR,一旦出现 ANR 我们就需要拿到对应的trace 文件来分析并解决...

  • Android ANR分析

    [toc] ANR分析 ANR触发场景 在android系统中,特定的操作需要在一定时间内完成,超过限定的时间就会...

  • Android NDK ANR问题分析处理

    Android开发中不可避免会遇到ANR的情况,如果是Java层发生了ANR,我相信这个日志很好分析,这篇文章...

  • ANR(1)---理解Android ANR的信息收集过程

    移步ANR系列基于Android 6.0源码, 分析当发生ANR时系统的处理过程 一 ANR场景 无论是四大组件或...

  • ANR系列

    ANR(0)---理解Android ANR的触发原理ANR(1)---理解Android ANR的信息收集过程A...

  • Android 面试题

    1、Android中的ANR ANR 就是 Application Not Responding ,即应用程序未响...

  • Android探究之ANR

    什么是ANR ANR:Application Not Responding,即应用程序无响应。 在Android中...

网友评论

    本文标题:Android中ANR分析

    本文链接:https://www.haomeiwen.com/subject/tdwfjttx.html