《Android群英传》---读书笔记9
Posted yarsnwoing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Android群英传》---读书笔记9相关的知识,希望对你有一定的参考价值。
《android群英传》—读书笔记9
标签(): android中级 读书笔记
Android 性能优化
知识点:
布局优化
内存优化
使用各种工具来进行分析,优化
10.1 布局优化
在Android系统中,系统通过VSYNC信号触发对UI的渲染,重绘,其间隔时间为16ms,(即1000ms显示60帧画面的单位时间,1000/60),所以系统的每次渲染的时间都保持在16ms之内,那我们看到的画面将是非常流畅的。
Android系统提供了检测UI渲染时间的工具,打开开发者选项,选择“Profile GPU Rendering”,并选中”On screen as bars”选项,这时就会显示一些条形图,中间绿色横线表示VSYNC时间16ms,尽量保持所有的条形图都在这条绿线以下
10.1.2 避免Overdraw
Android系统在开发者选项中提供了一个检测工具—“Enable GPU Overdraw”,激活后可以通过界面上的颜色来判断Overdraw的次数,尽量优化绘图层次,尽量增大蓝色区域,减少红色的区域。
10.1.3 优化布局层级
在Android系统中,系统对View的测量,布局和绘制都是通过对View数的遍历来进行操作的。如果一个View树的高度太高,就会严重影响测量,布局和绘制的速度,Google也在API文档中建议View的高度不宜超过10层
10.1.4 避免嵌套过多无用布局
1 使用< include>标签重用Layout
在< include>标签中通过alyout属性添加对共用UI的ID引用即可:layout=”@layout/common_in”,注意的是如果想在< include>标签中覆盖原布局中的 android:layout_XXXX 属性,必须同时指定android:layout_width和android:layout_height属性
2 使用< ViewStub>实现View的延迟加载
< ViewStub>是一个非常轻量级的组件,它不仅不可视,而且大小为0,使用与< include>类似,通过android:layout=”@layout/not_often_use”引用布局
然后在代码中通过findViewById()方法找到< ViewStub>组件,接着通过setVisibility(View.VISIBLE)方法或者ViewStub的inflate()方法显示这个View,后者可以返回引用的布局,从而再通过View.findViewById()找到对应的控件
View inflateView=mViewStub.inflate();
TextView textView=(TextView)inflateView.findViewById(R.id.tv);
textView.setText("HaHa!");
注意不管使用哪种方式,一旦< ViewStub>显示出来了,< ViweStub>就不存在了,取而代之的是被inflate的Layout,所以不能两次调用inflate方法,不然会报错
< ViewStub>与View.GONE的区别就是,前者只有在显示时才会去渲染布局,而后者在初始化布局树的时候就已经添加到布局树中了,前者效率更高
10.1.5 Hierarchy Viewer
通过hierarchyviewer工具能够很快的在视图中找到冗余的布局,从而有目的的优化布局。同时该工具还可以显示很多有用的信息。简明使用方法见书中P235页
10.2 内存优化
10.2.2 获取Android系统内存信息
1 Process Stats: 是KK上新增的一个系统内存监视服务,可以通过Setting-Developer options-Process Stats打开,也可以通过
adb shell dumpsys procstats打开
2 Meminfo
也是系统上一个非常重要的内存监视工具,可以通过Settings-Apps-Running打开这一界面,也可以通过
adb shell dumpsys meminfo打开
10.3 Lint工具
Android Lint工具是AS中集成的一个Android代码提示工具,它可以给你的代码提供非常强大的功能。例如冗余布局时会出现警告
使用AS的Memory Monitor工具
略
使用TraceView工具优化App性能
TraceView是一个Android下的可视化性能调查工具,它用来分析TraceView日志
1 生成TraceView日志:
通过代码生成精确范围内的TraceView日志:
使用Debug类的方法开启TraceView监听。通过调用Debug.startMethodTracing()方法开启监听,通过Debug.stopMethodTracing()结束监听,我们可以通过使用者两个方法包围要监听的代码块。
TraceView的日志会保存到/sdcard/dmtrace.trace目录下,因此需要增加权限
监听完后可以使用ADB命令将日志导出到本地
还可以通过Android Device Monitor生成TraceView日志
选择要调试的进程,点击工具栏中的“start method profiling”,然后在弹出框中选择监听模式,最后在点击“stop method profiling”即可结束监听
2 打开TraceView日志
可以通过SDK中的sdk\\tools\\traceview.bat 工具打开,或者使用ADM中的file下的open file打开
3 分析TraceView日志
TraceView分为两部分,上面是显示方法执行时间的时间轴区域,下面是显示详细信息的profile区域
在时间轴区域中显示了不同线程在不同时间段内的执行情况,在时间轴中,每一行都代表了一个独立的线程
在profile区域中:
Incl CPU Time 某方法占用CPU时间
Excl CPU Time 某方法本身(不包括子方法)占用CPU的时间
Incl Real Time 某方法真正执行时间
Excl Real Time 某方法本身(不包括子方法)真正执行的时间
Calls+RecurCalls 调用次数+递归回调的次数
分析的时候通常从Incl CPU Time 和Calls+RecurCalls开始分析,对占用时间长的方法进行重点分析,如果占用时间长且Calls+RecurCalls少就可以列为怀疑对象了
10.6 使用MAT工具分析App内存状态
1 生成HPROF文件
2 分析HPRPF文件
10 .7 使用Dumpsys命令分析系统状态
使用Dumpsys命令可以累出Android系统相关的信息和服务状态。
使用Dumpsys命令时,只要输入adb shell dumpsys +参数 即可。参数有很多,比如activity, meminfo ,package, alarm, procstats等
以上是关于《Android群英传》---读书笔记9的主要内容,如果未能解决你的问题,请参考以下文章
Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧