当前项目中是如何进行性能优化分析的
这道题想考察什么?
- 是否了解android性能优化
- 是否了解性能优化的常规步骤
考察的知识点
- android性能优化的分类
- android性能优化的具体操作
考生应该如何回答
第一、布局优化
- UI渲染机制
要想做好布局优化,首要要了解AndroidUI渲染机制;在Android中,系统是通过VSYNC信号触发对UI渲染,重绘,其间隔是16ms(毫秒);16毫秒的来历就是1000ms中显示60fps(帧)画面的单位时间,即1000/60约等于16毫秒;人眼所感觉的流畅画面是每秒需要显示40到60帧;
例如一次绘制任务需要25毫秒,那么在16毫秒系统VSYNC信号时还没有完成绘制,该帧就会被丢弃,等待下次信号才开始绘制,导致2*16ms 内都是显示同一帧画面,这就是卡顿的原因;
- 减少布局层级
布局优化的思想很简单,就是减少布局的层级;能试用LinearLayout和FrameLayout布局,就不使用RelativeLayout布局,因为RelativeLayout的功能比较复杂,它的布局过程需要花费根多的CPU时间;但是如果使用LinearLayout使布局层级变多的话,尽量使用RelativeLayout布局减少层级,如果可以的话;或者使用ConstraintLayout(约束布局)减少层级嵌套;
- 使用include 、merge 、ViewStub标签
标签主要作用是:布局重用;
注意事项:支支持android:layout_开头的属性(android:id属性除外),比如android:layout_width、android:layout_height;而且如果include标签指定了android:layout_*属性,那么android:layout_width、android:layout_height必须存在;
标签主要作用:和include标签配合使用减少布局的层级;merge的布局取决于父控件是哪个布局,使用merge相当于减少了自身的一层布局,直接采用父include的布局;
标签主要作用:延迟加载,按需加载布局;是个轻量级的View,且宽高为0;
第二、绘制优化
- 避免过度绘制
移除重复的背景色、移除子View多余的背景色
- View的onDraw方法要避免执行大量的操作
一方面onDraw方法中不要创建新的局部变量,因为onDraw方法可能会被平凡的调用,这样就会产生大量的临时的对象;另一方面,onDraw方法中不要做耗时的任务,也不要执行上万次的循环,不然会造成View绘制过程的不流畅。
第三、内存优化
通常所说的内存是指手机RAM,主要包括:寄存器,栈(Stack),堆(Heap),静态存储区,常量池;
- Bitmap优化
使用适当分辨率和大小的图片,使用图片缓存;对图片进行压缩;
- File,Receiver,Cursor等对象,注意使用后释放掉;
- 使用SurfaceView替代View进行大量,频繁的绘制操作;
- 属性动画开启之后,记得在关闭页面的时候停止动画;
- 减少使用不必要的成员变量;
第四、线程优化
线程优化一般采用线程池替代线程的方法;这样避免程序中存在大量的线程,也避免了创建销毁线程所带来的性能开销;
第五、启动速度优化
- 设置闪屏图片主题
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowFullscreen">true</item>
<item name="android:windowIsTranslucent">true</item>
</style>
- 任务异步加载处理
详细关注公众号:Android老皮
还能解锁 《Android十大板块文档》 ,让学习更贴近未来实战。已形成PDF版
内容如下:
1.Android车载应用开发系统学习指南(附项目实战)
2.Android Framework学习指南,助力成为系统级开发高手
3.2023最新Android中高级面试题汇总+解析,告别零offer
4.企业级Android音视频开发学习路线+项目实战(附源码)
5.Android Jetpack从入门到精通,构建高质量UI界面
6.Flutter技术解析与实战,跨平台首要之选
7.Kotlin从入门到实战,全方面提升架构基础
8.高级Android插件化与组件化(含实战教程和源码)
9.Android 性能优化实战+360°全方面性能调优
10.Android零基础入门到精通,高手进阶之路