起因

在面试时,面试官问道:说一说在安卓中怎么对性能进行优化。
刚听到这个问题时,有点懵,平常做开发的时候没有对这方面进行过系统的总结,那姑且今天好好总结一下吧。

正文

该文中,主要对渲染、内存、功耗、网络等方面进行优化。

渲染方面:

在Android中,系统要求每一帧都要在16ms内绘制完成,这个速度大概每秒60帧,这样才能保证体验的流畅度。

造成UI卡顿的几个原因:

1、 布局层级过多,花费很多时间去重新绘制控件;
2、 过度绘制,屏幕上某个像素在同一帧被绘制了多次;
3、 在UI线程中进行轻微的耗时操作,比如读取一个很小的文件;
4、 同一时间内,动画执行的次数过多,导致CPU或者GPU负载过重;
5、 频繁的触发GC机制;
6、 不必要的资源及逻辑。

常用检测工具:

1、 Androidstudio的Hierarchy Viewer,可以使用该工具检测各个view的绘制时间;
2、 手机自带的ShowGPUOverdraw检测Overdraw。

几个解决方案:

1、 删除或合并多余或者不必要的层级;
2、 移除不必要的背景,比如在布局文件中已经设置过background,然后在java代码中又设置了一遍;
3、 使用merge标签合并布局;
4、 使用惰性标签ViewStub实现布局的动态加载。

内存方面:

安卓作为移动设备,内存相对台式电脑的内存来说还是相当宝贵的。
容易出现的几个问题:
1、 对程序内存的管理不够合理高效导致的内存浪费;
2、 使用对象或者方法不合理导致的内存泄漏。

常用检测工具:

1、 Androidstudio自带的Memory monitor;
2、 LeakCanary。

几个解决方案:

1、 在不影响功能的情况下,使用效率较高的类代替效率较低的类;
2、 避免内存泄漏,扩大内存使用。

功耗方面:

关于该问题,一般指的是减少应用的耗电量,增加用户的使用时间,因为如果用户发现这个应用耗电量巨大的话有两种可能,卸载和减少使用量。
造成功耗不合理的其中几个原因:
1、 不合理的页面刷新;
2、 不合理的动画使用、IO操作、布局等造成的CPU或GPU负载过重等;
3、 不必要的后台进程。
几个解决方案:
1、 优化刷新方式,可以使用局部刷新;
2、 使用相关工具,检测造成CPU或GPU负载过重的原因并优化;
3、 去掉或减少不必要的后台进程中的任务。

网络方面:

网络也是我们开发中经常使用到的方面。
网络方面直接上需要注意的几个地方:
1、 合并网络请求,减少请求次数,从而达到减少建立连接的次数,减少耗时;
2、 当数据量大时可以进行压缩传输或者进行分批次加载;
3、 将网络数据进行缓存,避免频繁的请求网络。

目前想到也只有这几个方面,如果还有哪些没想到的请留言交流呀