《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等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值