【Android】ANR和FC

首先我们要对他们两个有一个简单的认识。


ANRFC都是Android中非常常见的两种错误,这两者的出现会极大地影响我们的APP的用户体验,用户们会觉得你的应用真垃圾、真慢,动不动就卡住了,还要我等,即使你的作品功能很强大或者思路很新颖,但是这两个硬伤会降低你作品的水准。


1.ANR的定义(Application Not Responding)

翻译过来就是应用程序无响应,此时正在运行的应用程序会变得很慢,反应不灵敏(一般来说,超过100毫秒的时间用户就会感知到阻滞感),然后显示一个ANR对话框,用户可以选择继续等待直到恢复正常,或者直接关闭程序。在现实的使用情境中,我们的用户是相当没有耐心的,伴随着一句"垃圾程序",帅气的关掉/重启你的程序。但是我们不能埋怨用户,毕竟他们不懂技术,不知道只要小小的等一下下就OK了,所以这就要求我们程序员要把代码写的规范一点。


其实出现ANR的原因就一点:用户输入时间在5S内没有得到相应,Android系统就会判定你出现了ANR,弹出一个对话框来提醒你。具体的原因可能很多,比如在主线程里下载大量数据、数据库读取数据、读写SD卡的等等。因为我们的主线程只负责

1.创建UI控件

2.更新UI控件状态

3.事件处理

这以上三点,如果你在主线程里这样做,当然会使主线程阻塞啦。


至于解决办法其实很简单,为每一个耗时的操作都开一个子线程,分别在子线程里执行,然后把结果通过Handler来传递给主线程,然后主线程负责进行做出对应的处理。Handler的工作机制我在之前的文章里http://blog.csdn.net/lchad/article/details/42150563有介绍,如果不熟悉的话可以起看一下。


2.FC的定义(Forced Close)

翻译过来就是被迫退出,程序或ROM出现了比较严重的错误,必须退出重启。原因大概有一下

    1.Error

                    OOM(out of memory error)     内存耗尽

                    StackOverFlowError                堆栈溢出

     2.RuntimeException                            运行时错误


以上的问题大多是我们写代码时犯下的逻辑错误或者优化做的非常差,这是绝对绝对不允许出现的。至于解决办法就是DEBUG你懂得。常用的方法无非就是Log打印日志或者借助工具(例如强大的curl,等我用熟了再写一篇来介绍一下它,好的),其实能够熟练运用logcat,明白log各段的大致意思、擅于运用Filter就能够解决大多数问题了。


讲到这里,相信大家对ANR和FC已经有了一个清晰度认识了,感谢,希望大家每天都有提升。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值