ANR与Crash

实际开发过程当中,ANR和Crash常常会出现,若是要想办法避免他们的出现,首先就要了解他们数据库

ANR

ANR即(application not responding),即应用无响应,程序会弹出一个dialog提示用户程序无响应,而这对于用户体验无疑是很很差的网络

至于程序为什么会“无响应”,主要有如下几个缘由app

1:InputDispatching (5 seconds) --主要类型异步

按键或触摸等输入事件在特定时间内无响应spa

2:BroadcastTimeout(10 seconds).net

BroadcastReceiver在特定时间内没法处理完成线程

3:ServiceTimeout(20 seconds) --小几率类型blog

Service在特定的时间内没法处理完成事件

看起来好像略复杂,其实能够换个角度来理解,通常对于正常的APP而言,能形成长时间操做的主要就是耗时操做,大致上分为两类,其一是网络操做,其二是文件,数据库的读写操做开发

若是耗时操做在UI线程,也就是主线程内进行操做,并且也确实“耗时”的状况下,就会形成UI线程的堵塞,也就形成了ANR

因此简而言之,可以解决ANR的办法就是不在主线程内进行耗时操做

这里就提出了一个概念,异步

异步说的简单些,就是多开线程,在其余线程内处理这些耗时操做,处理完毕以后,返回所须要的参数给主线程,主线程再作操做(因此之因此主线程又叫作UI线程,是由于咱们应该只在主线程内处理UI操做)

异步的实现就说来话长了,从最开始的Thread+Handler,到后面的AsyncTask,再到Rxjaca,这里就很少作说明了

经过异步,咱们可让UI线程不堵塞或者尽可能低可能性的堵塞,这样就极大避免了ANR的出现

Crash

crash,即崩溃,和ANR同样,系统会弹出一个dialog提示用户该应用已崩溃,同理,用户体验很糟糕

之因此会出crash,一句话归纳,基本就是由于异常的出现

在程序中可能会出现你未捕获到的异常,这就形成了崩溃,可是这种状况下即便出现了crash咱们也应该换一种对用户较为友好的方式来告知用户

那么如何改掉crash的提示方式呢,比较原始的方法,附上任玉刚大神的一篇博文

Android程序Crash时的异常上报

固然了,这么久过去了,如今处理的方式也能够接入第三方的SDK来解决,远的不说,腾讯的Bugly就是其中一种解决方案

相关文章
相关标签/搜索