0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在软件开发中怎么样去避免ANR?

Dbwd_Imgtec 来源:未知 作者:工程师郭婷 2018-07-31 09:31 次阅读

一:什么是ANR

如果应用程序不能响应用户的输入了,那么就可以说应用ANR了。

如果需要运行一个耗时较长的操作的时候,不要把这个任务放在UI线程上运行,而是单独创建一个线程运行那些操作。

以下情况会出现ANR提示对话框:

5秒内对一个输入动作没有反应。

一个BroadcastReceiver在10秒内没有完成运行。

二:如何避免ANR

activity的关键的生命周期方法: onCreate 和 onResume方法上尽可能处理越少越好的事情。

下面列举的操作都是长时间运行的:网络工作、数据库操作、精确的计算,例如重新定制图片(应该在单独的工作线程中)、或者通过异步请求操作数据库的情况下。

最有效的创建一个工作线程来执行长时间操作的是Asynctask类。如果你非要自己创建一个自己的Thread或者HandlerThread类,你应该设置这个类的属性为"background",通过调用Process.setThreadPriority() ,填上THREAD_PRIORITY_BACKGROUND参数。如果你不设置低优先级,那么你的线程仍然有可能减慢你的应用,因为它默认运行的优先级和你的UI线程的优先级一样。当你实现Thread或HandlerThread方法的时候,确定你的UI线程不会在等待工作线程结束的过程中被阻塞,不要调用Thread.wait()或者 Thread.sleep()。你的应用主线程不应该因为等待子线程完成而阻塞,而是应该提供一个Handler去接受其他线程完成后的结果。这样设计你的应用可以保证你的应用仍然能够响应用户的输入,避免ANR。

接受BroadcastReciver的执行时间,约束它的执行时间,主要进行的操作是保存设置或者注册一个通知,这样的话,才能够避免当其他方法调用UI线程的时候,应用程序在执行长耗时的方法。

如果非要在接收Broadcast后执行长时间的操作,可以启动一个IntentService来执行。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • anr
    anr
    +关注

    关注

    0

    文章

    3

    浏览量

    2125

原文标题:Android开发之如何避免ANR(Keeping Your App Responsive)

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式软件开发的程序架构

    嵌入式软件开发,包括单片机开发软件架构对于开发人员是一个必须认真考虑的问题。
    发表于 02-02 06:58

    教你怎样提高STM32软件开发效率

    教你怎样提高STM32软件开发效率
    发表于 02-21 07:22

    极限编程工控软件开发的应用

    极限编程是一种新近提出的轻量级软件工程方法,它的高效和实用很快就吸引了大批软件人员的关注。本文对极限编程的概念和模式进行了概要介绍,同时结合国内工控软件开发
    发表于 07-31 08:27 12次下载

    可视化语言技术软件开发的应用

    可视化语言技术软件开发的应用:可视化语言技术比一维文本语言描述软件组成方面具有优越性.由于图表和图形概念在系统建模
    发表于 10-31 09:02 5次下载

    ARM嵌入式软件开发

    ARM嵌入式软件开发ARM嵌入式软件开发ARM嵌入式软件开发
    发表于 01-15 17:29 65次下载

    面向对象方法汽车排放测试系统软件开发的应用

    面向对象方法汽车排放测试系统软件开发的应用
    发表于 01-22 13:38 12次下载

    基于嵌入式软件开发构件技术的研究

    基于嵌入式软件开发构件技术的研究
    发表于 10-30 15:36 6次下载
    基于嵌入式<b class='flag-5'>软件开发</b><b class='flag-5'>中</b>构件技术的研究

    JAVA计算机软件开发应用

    在当前计算机软件开发中比较常用的编程语言就是JAVA。JAVA编程语言也是一种面向对象语言,是具备开发价值的源代码,可以灵活应用在各种操作平台中。虽然市场存在不少的编程语言,但是J
    发表于 11-06 15:02 13次下载
    JAVA<b class='flag-5'>在</b>计算机<b class='flag-5'>软件开发</b><b class='flag-5'>中</b>应用

    低代码平台ERP软件开发的作用

    很多人认为低代码开发平台的出现颠覆了传统的软件开发模式,对软件开发行业造成冲击,其实低代码开发平台的出现只是提高了软件开发的效率,并不是要颠
    发表于 05-09 11:16 870次阅读

    汽车软件开发流程介绍

    汽车软件开发软件开发流程是软件工程的核心,因为它们为软件开发实践“提供了一个骨架并确保了它
    发表于 08-15 12:03 1.5w次阅读

    软件开发外包有哪些坑要注意?

    软件开发外包公司并不比自己招人做的软件差,甚至比自己招人做得好,那么选择软件开发外包公司会有哪些坑必须要注意?   今天为大家分享几种软件外包
    的头像 发表于 10-11 18:36 1433次阅读

    软件开发的流程和方法有哪些?

    软件开发是根据客户要求构建出软件系统或者系统软件部分,一般是通过程序设计语言实现的,比如C/C++/JAVA/JSP/ASP等开发语言。
    的头像 发表于 12-27 10:56 2114次阅读
    <b class='flag-5'>软件开发</b>的流程和方法有哪些?

    软件开发必读!华为云软件开发生产线 CodeArts 深度体验指南

    都有什么功能?软件开发能起到什么作用?CodeArts snap 是否有介绍的那般神奇? 本文将为各位开发者详细介绍如何从了解学习到体验掌握华为云
    的头像 发表于 08-25 13:43 1233次阅读
    <b class='flag-5'>软件开发</b>必读!华为云<b class='flag-5'>软件开发</b>生产线 CodeArts 深度体验指南

    嵌入式软件开发软件开发的区别

    嵌入式软件开发软件开发是两个不同的概念,它们一些关键方面有着明显的区别。嵌入式软件开发是指开发嵌入
    的头像 发表于 01-22 15:27 2281次阅读

    缓存技术软件开发的应用

    现代软件开发,随着数据量的爆炸性增长和用户对响应速度的高要求,缓存技术成为了提升系统性能的重要手段。缓存技术通过将数据存储离用户更近的位置,减少数据访问延迟,提高数据处理速度,从
    的头像 发表于 12-18 09:32 217次阅读