Android app优化:性能优化、内存优化、启动优化、图片优化、布局优化、响应优化、电量优化、网络优化、安装包优化

it2022-05-05  134

性能优化:

性能优化是一个宽泛的概念,以下的优化都可以认为是性能优化的范畴。

内存优化:

常见的内存问题及优化方案

1,内存泄漏:点击查看第二十三题答案

2,内存抖动:避免频繁创建大量、临时的小对象

3,图片Bitmap相关:点击查看第二十题答案

4,代码质量 & 数量:减少不必要的类&对象,谨慎选用第三方库,代码混淆,选用合适数据结构

5,日常不正确使用:基础要扎实,在实践中活学活用

启动优化

1,闪屏页优化:App 应用启动都会先进入一个空白的启动窗口(闪屏页)来展示应用信息,默认是空白的,一般通过设置闪屏页主题图片来给用户带来的视觉优化体验

2,Application 优化:很多第三方组件(包括App应用本身)都选择在完成初始化操作。过多的复杂初始化操作会影响到应用的启动性能

      1)必要的组件一定要在主线程中立即初始化(入口 Activity 可能立即会用到)

      2)组件一定要在主线程中初始化,但是可以延迟初始化

      3)组件可以在子线程中初始化(建议延迟初始化)

3,广告页优化:广告页图片可以采用异步加载的方式,并判断下载信息以决定重新下载和展示

图片优化:

参考内存优化中的第三条

布局优化:

1,合理选择布局嵌套,建议使用ConstraintLayout

2,合理使用include(布局重用,便于管理)、merge(与include配合减少嵌套)、ViewStub(占位布局,懒加载)

3,避免过度绘制

响应优化:

1,减少刷新次数:比如进度更新,要进度有变化再去刷新,且保证频率不得高于系统的刷新频率

2,避免非必要的刷新:若控件不可见,则无需刷新

3,避免后台线程影响:如列表控件,在滑动时不要去加载图片,可以在滑动监听里停止图片的加载

4,局部刷新:

5,尽量使用属性动画:它减少了自身的重绘,最后要清除

6,使用StringBuilder:大量字符拼接或修改时,使用StringBuilder以避免频繁创建对象

7,开启硬件加速

电量优化:

1,网络请求:在蜂窝移动网络下,最好批量执行网络请求,尽量避免频繁的间隔网络请求,尽量多地保持在 Radio Standby 状态

尽量在 Wi-Fi 环境下使用数据传输

2,避免Wake Lock使用不当:必要的时候使用,及时释放

3,定位:定位中使用 GPS,及时关闭

4,传感器:选择合适的采样率,在后台时注意及时注销传感器监听

5,熄屏:熄屏后停止一些和 UI 效果有关的操作,比如动画

6,计算优化:浮点运算比整数运算更消耗 CPU 时间片,因此耗电也会增加,在编写代码的过程中应该尽量减少浮点运算

      1)除法变乘法

      2)充分利用移位

      3)查表法,直接使用映射关系,但这会增加内存占用,视情况而定

7,使用 Job Scheduler管理后台任务

网络优化:

1,不用域名,用IP直连

2,服务器部署:服务器多运营商多地部署

3,连接复用:节省连接建立时间,如开启 keep-alive

4,数据压缩:利用Gzip库来压缩文本数据

5,请求打包:合并网络请求,减少请求次数

6,网络缓存:对服务端返回数据进行缓存,设定有效时间

7,大文件传输:避免整文件传输,采用分片传输;根据网络类型以及传输过程中的变化动态的修改分片大小;每个分片失败重传的机会

8,与服务端接口优化:避免传输无用数据,对即将使用的数据合并传输

安装包优化:

1,删除无用代码和资源

2,图片压缩及图片格式选用(如webp格式,矢量图)

3,避免重复库,第三方lib库的清理

4,开启混淆

5,支持插件化

6,使用第三方压缩打包工具


最新回复(0)