您的位置:首页 > 移动开发 > Android开发

Android ANR问题分析

2017-12-02 16:34 281 查看
1.Android ANR问题报错一般有3种情况

类型按键或触摸事件在5秒内无响应

BroadcastReceiver在10秒内无法处理完成

Service在20秒内无法处理完成

2.产生ANR的原因

在主线程种进行如下操作:

高耗时的操作,如图像变换

磁盘读写,数据库读写操作

大量的创建新对象

3.如何避免ANR

UI线程尽量只做跟UI相关的工作

耗时的操作(比如数据库操作,I/O,连接网络或者别的有可能阻塞UI线程的操作)把它放在单独的线程处理

尽量用Handler来处理UIThread和别的Thread之间的交互

4.解决的逻辑

使用AsyncTask:

在doInBackground()方法中执行耗时操作

在onPostExecuted()更新UI

使用Handler实现异步任务:

在子线程中处理耗时操作

处理完成之后,通过handler.sendMessage()传递处理结果

在handler的handleMessage()方法中更新UI

或者使用handler.post()方法将消息放到Looper中

5.怎么排查ANR产生的原因

首先分析log

从trace.txt文件查看调用stack,adb pull

data/anr/traces.txt ./mytraces.txt

看代码

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

拓展: Force Close什么时候会出现

Error

OOM,内存溢出

StackOverFlowError

Runtime,比如说空指针异常

解决的办法

注意内存的使用和管理

使用Thread.UncaughtExceptionHandler接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android ANR