没有合适的资源?快使用搜索试试~ 我知道了~
Android性能优化.pdf
需积分: 48 40 下载量 191 浏览量
2021-12-22
10:05:32
上传
评论 2
收藏 32.75MB PDF 举报
温馨提示
试读
408页
Android性能优化:ANR问题解析 crash监控方案 启动速度与执行效率优化 内存优化 耗电优化 网络传输与数据存储优化 APK大小优化
资源推荐
资源详情
资源评论
1.1.2 原因
Android系统中,ActivityManagerService(简称AMS)和
WindowManagerService(简称WMS)会检测App的响应
时间,如果App在特定时间无法相应屏幕触摸或键盘输入
时间,或者特定事件没有处理完毕,就会出现ANR。
以下四个条件都可以造成ANR发生:
InputDispatching Timeout:5秒内无法响应屏幕触
摸事件或键盘输入事件
BroadcastQueue Timeout :在执行前台广播
(BroadcastReceiver)的 onReceive() 函数时10秒没
有处理完成,后台为60秒。
Service Timeout :前台服务20秒内,后台服务在200
秒内没有执行完毕。
ContentProvider Timeout :ContentProvider的
publish在10s内没进行完。
1.1.3 避免
尽量避免在主线程(UI线程)中作耗时操作。
那么耗时操作就放在子线程中。
关于多线程可以参考:Android多线程:理解和简单使用总
结
1.2 ANR分析办法
1.2.1 ANR重现
这里使用的是号称Google亲儿子的Google Pixel xl
(Android 8.0系统)做的测试,生成一个按钮跳转到
ANRTestActivity ,在后者的 onCreate() 中主线程休眠
20秒:
在进入 ANRTestActivity 后黑屏一段时间,大概有七八
秒,终于弹出了ANR异常。
@Override
protected void onCreate(@Nullable Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_anr_test);
// 这是Android提供线程休眠函数,与
Thread.sleep()最大的区别是
// 该使用该函数不会抛出InterruptedException异
常。
SystemClock.sleep(20 * 1000);
}
最后一句The application may be doing too much work
on its main thread.
告知可能在主线程做了太多的工作。
1.2.3 ANR分析办法二:traces.txt
刚才的log有第二句 Wrote stack traces to
'/data/anr/traces.txt' ,说明ANR异常已经输出到
traces.txt 文件,使用adb命令把这个文件从手机里导出
来:
1. cd到adb.exe 所在的目录,也就是Android SDK的
platform-tools 目录,例如:
此外,除了Windows的cmd以外,还可以使用
AndroidStudio的Terminal来输入adb命令。
1. 到指定目录后执行以下adb命令导出traces.txt 文件:
traces.txt 默认会被导出到Android SDK的\platform-
tools目录。一般来说 traces.txt 文件记录的东西会比较
多,分析的时候需要有针对性地去找相关记录。
cd D:\Android\AndroidSdk\platform-tools
adb pull /data/anr/traces.txt
----- pid 23346 at 2017-11-07 11:33:57 -----
----> 进程id和ANR产生时间
Cmd line: com.sky.myjavatest
剩余407页未读,继续阅读
资源评论
Android诚
- 粉丝: 8
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功