首页 » Android » Android ANR之一二三

Android ANR之一二三

原文 http://blog.csdn.net/CallmeZhe/article/details/79204850

2018-02-05 02:00:44阅读(511)

<a href=Android ANR之一二三" src="http://img.blog.csdn.net/20180130132903789?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ2FsbG1lWmhl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" align="middle">

1、ANR排错一般有三种类型
KeyDispatchTimeout(5 seconds) --主要是类型按键或触摸事件在特定时间内无响应
BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成
ServiceTimeout(20 secends) --小概率事件 Service在特定的时间内无法处理完成

2、哪些操作会导致ANR:
高耗时的操作,如图像变换
磁盘读写,数据库读写操作
大量的创建新对象


3、避免
UI线程尽量只做跟UI相关的工作耗时的操作(比如数据库操作,I/O,连接网络或者别的有可能阻塞UI线程的操作)把它放在单独的线程处理尽量用Handler来处理UIThread和别的Thread之间的交互

4、解决的逻辑

1.在子线程中进行耗时操作 

如:使用AsyncTask

在doInBackground()方法中执行耗时操作在onPostExecuted()更新UI
2.使用Handler实现异步任务
在子线程中处理耗时操作处理完成之后,通过handler.sendMessage()传递处理结果在handler的handleMessage()方法中更新UI或者使用handler.post()方法将消息放到Looper中 5、排查
首先分析log从trace.txt文件查看调用stack,adb pull data/anr/traces.txt ./mytraces.txt看代码仔细查看ANR的成因(iowait?block?memoryleak?)















最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹