ANR定义

在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。

解决ANR异常概述:   

考虑上面的ANR定义,让我们来研究一下为什么它会在Android应用程序里发生和如何最佳构建应用程序来避免ANR。

Android应用程序通常是运行在一个单独的线程(例如,main)里。这意味着你的应用程序所做的事情如果在主线程里占用了太长的时间的话,就会引发ANR对话框,因为你的应用程序并没有给自己机会来处理输入事件或者Intent广播。

因此,运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。然而,不是说你的主线程阻塞在那里等待子线程的完成——也不是调用Thread.wait()或是Thread.sleep()。替代的方法是,主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。以这种方式设计你的应用程序,将能保证你的主线程保持对输入的响应性并能避免由于5秒输入事件的超时引发的ANR对话框。这种做法应该在其它显示UI的线程里效仿,因为它们都受相同的超时影响。

引起ANR异常的常见情况:

1、在主线程内进行网络操作,获取服务器上的资源

2、在主线程内进行一些缓慢的磁盘操作(

应用应该在5秒或者10秒内响应

一般来说,在应用程序里,100到200ms是用户能感知阻滞的时间阈值。因此,这里有一些额外的技巧来避免ANR,并有助于让你的应用程序看起来有响应性。

如果你的应用程序为响应用户输入正在后台工作的话,可以显示工作的进度(ProgressBar和ProgressDialog对这种情况来说很有用)。

通过Handler解决ANR异常:

方式一:

1.开启一个新的线程,进行数据请求,此线程内包含了比较耗时操作的代码
2. 获取数据后,调用handler.sendMessage方法 
3. 在主线程中调用  handleMessgae(Message msg) 方法接收数据并更新UI

方式二:

利用handler.post(new Runnable(){

              public void run(){ 

             -------------------- 耗时操作的代码

           }}

        ); 

给创建handler对象的线程发送一个runnable,自动执行run方法

Android开发 ANR异常的解决(应用程序无响应)相关推荐

  1. Android之ANR异常及解决方法

    ANR (Application Not Responding) ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(AN ...

  2. 鸿蒙系统测试失败,ANR-WatchDog-ohos: 一个简单的监测程序,可检测到鸿蒙系统的 ANR(Application Not Response-应用程序无响应)错误并引发有意义的异常...

    ANR-WatchDog-ohos 一个简单的监测程序,可检测到鸿蒙系统的 ANR(Application Not Response-应用程序无响应)错误并引发有意义的异常 项目名称:ANR-Watc ...

  3. Android Eclipseproject开发中的常见调试问题(二)android.os.NetworkOnMainThreadException 异常的解决的方法...

    android.os.NetworkOnMainThreadException 异常的解决的方法. 刚开是把HttpURLConnectionnection 打开连接这种方法放在UI线程里了,可能不是 ...

  4. Android开发详解之App升级程序一点通

    Android开发详解之App升级程序一点通 结束语 UpdateManager.java import java.io.File; import java.io.FileOutputStream; ...

  5. Android Training - 避免程序无响应ANR

    可能你写的代码在性能测试上表现良好,但是你的应用仍然有时候会反应迟缓(sluggish),停顿(hang)或者长时间卡死(frezze),或者应用处理输入的数据花费时间过长.对于你的应用来说最槽糕的事 ...

  6. chm打开秒退_Mac_Mac电脑程序无响应怎么办?Mac程序无响应解决方法,虽然Mac电脑一向以运行稳定、 - phpStudy...

    Mac电脑程序无响应怎么办?Mac程序无响应解决方法 虽然Mac电脑一向以运行稳定.流畅而著称,但Mac电脑运行时间长了,难免也会遇到程序卡死无响应.一直"转菊花"的情况,可能是由 ...

  7. C# OpenFileDialog.ShowDialog 打不开,程序无响应(错误的解决)

    1:C# OpenFileDialog.ShowDialog 打不开,程序无响应 环境:win7 .Net framework2.0 现象; c#写的一个程序,在xp下点击文件打开按钮没有任何问题,但 ...

  8. 简单有效的解决打开Xcode一直loading并显示程序无响应问题

    简单有效的解决打开Xcode一直loading并显示程序无响应问题 项目场景: 问题描述: 原因分析: 解决方案: 项目场景: 打开一个旧的项目文件的 main.storyboard 时候Xcode崩 ...

  9. 您没有权限来打开应用程序_苹果建议:除非应用程序无响应,否则不要滑动强制退出...

    紫金财经2月26日消息 今日,苹果公司发布的一条建议,成为了微博热搜的话题.苹果建议除非应用程序无响应,否则不要滑动强制退出. 苹果公司表示,滑动关闭iPhone的应用程序可能会缩短电池寿命,并使设备 ...

  10. Android ExceptionThrowable 常见异常和解决方法 奔溃日志上报 monkey异常修改

    java将所有的错误封装为一个对象,其根本父类为Throwable, Throwable有两个子类:Error和Exception. 注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理. ...

最新文章

  1. dropout,batch norm 区别 顺序
  2. R语言ggplot2可视化:使用ggplot2按照热力图的方式显示全是分类变量的dataframe数据、并自定义因子(factor)的图例颜色legend
  3. iOS UIScreen详解
  4. php中post提交参数_PHP中Http协议post请求参数
  5. 解决win 10 vscode 打开后白屏问题
  6. 【BZOJ4500】矩阵(差分约束)
  7. 大学计算机基础上机实践报告,大学计算机基础上机实践报告书册.doc
  8. 【leetcode】1090. Largest Values From Labels
  9. hanlp提取文本关键词的使用方法记录
  10. Linux/Ubuntu下解压命令
  11. iocomp iPlot使用说明13 Limits绘图界限
  12. dbc2000 注册机|dbc2000 注册码注册机下载
  13. pdf转word好用的软件
  14. 浪潮之巅: 中国企业高管硅谷交流会
  15. The “fxp/composer-asset-plugin“ plugin was skipped because it requires a Plugin API version (“^1.0“)
  16. Cookie.js 源码解析
  17. aoc显示器2k165hz测试
  18. 前端web页面防截屏水印生成方案(网页水印+图片水印)
  19. 有关电子商务平台的个人学习总结
  20. 三步搭建免费无限空间无限速网盘——基于docker与阿里云镜像(B站学习)

热门文章

  1. 股市集合竞价藏了很多秘密
  2. axure中继器求和_Axure学习笔记-中继器
  3. laravel 30分站搭建迷你博客
  4. CR渲染器全景图如何渲染颜色通道_3DMAX产品渲染教程,看看惊艳效果表现背后那些不为人知的技巧~...
  5. 超级详细的IDC搭建教程
  6. 色度抽样(4:2:0)到底是什么意思?
  7. PowerShell输出IP地址
  8. c语言程序设计医院排队功能,C语言-医院挂号排队系统.doc
  9. 电子计算机上total,计算器频幕上grand total 什么意思
  10. 电商网站建设步骤_电商网站建设的注意事项_OctShop