android项目知识点

android性能优化总结

2019-12-31  本文已影响0人  牙膏很好吃

1.绘制优化


卡顿造成原因:

优化方式:

<1>定性分析
①在安卓的开发者模式中,打开GPU调试,当条形图的高度高过绿色的横线时,代表绘制耗时过长。
②在安卓的开发者模式中,打开过度绘制,当一片区域的颜色是红色或者粉红色时,代表UI嵌套过深,可能有无用的UI层级存在。
③使用过程中,用户感觉到卡顿
<2>定量分析和优化
①使用systrace,查找卡顿点,可在代码中添加调试点,逐步排除,重点关注Alerts提示 和 Frames颜色为红色的部分;可以使用android device monitor进行大范围追踪,也可在代码中使用系统提供的api定量追踪。
代码中使用api如下:

systrace.png
android device monitor使用如下:
monitor_sys_trace.png
生成的html文件如下,下图展示了可以优化的点,比如绘制耗时等:
alert

②然后使用traceview查找具体耗时方法,针对优化:
在代码中api如下,可以生成.trace文件:


traceview.png

当然,也可以使用android device monitor,如下:


生成traceview
下面这示例可以看出:测试的testWriter()方法中,md5()方法消耗了大量时间,就可以找到优化点,从而进行针对性优化
example

③在android device monitor中,使用hierarchy view查看UI布局,优化嵌套层级,示例如下:


hierarchy view

④使用android lint进行代码检查,可以配置各种规则,可以对代码进行全方位的静态检查。

⑤自定义主线程的printer,检测每次消息处理时间,进行卡顿定位

可优化点

①性能framelayout>linearlayout>relativelayout,优先使用framelayout
②减少布局层级
③使用merge减少层级,使用viewstub绘制较少使用的布局
④已知宽高,不使用wrap_content属性
⑤界面只刷新必要的区域
⑥recycleview,listview只刷新对应的item
⑦硬件加速(api兼容问题)
⑧启动速度优化

2.内存优化


潜在问题

①频繁GC,导致线程阻塞
②内存泄漏,内存一致增长

优化点

①内存抖动,一般现象为锯齿状的内存状态图
②内存泄漏

优化工具

①借助leakcanary定位问题,找到内存泄漏的页面
②在androidstudio的profiler - memeory中,通过查看当前存在问题页面的内存快照,精准定位,查找泄漏点,进行问题修复。

常见内存泄漏

①静态类持有activity context
②handler内存泄漏
③第三方框架未释放
④实例变量持有fragment,导致fragment无法释放
⑤cursor,file未关闭

常用优化方式

①借助弱引用解决 handler内存泄漏;;实例变量持有fragment,导致fragment无法释放;静态类持有activity context
②静态类持有context,提供释放方法,将context置null
③正确关闭文件流,cursor
④图片优化,图片大小,图片编码,采样率,三级缓存
⑤lru缓存优化
⑥使用最优数据结构,靠经验

3.存储优化


常用方式及特点

①sharedpreference:适合存储简单配置信息,开关等
②file:适合存储大数据,音视频或者网络内容
③sqlite:适合存储复杂的数据类型
④contentprovider:进程之间的数据交换

优化点

①sharedpreference:使用apply异步存储
②sqlite:使用sqlitestatement;使用事务一次插入多条数据;使用索引提高查询效率,异步存储;分页
③file:文件读写并发
④contentprovider:权限管理

4.稳定性优化


存在问题

①crash:java层,native层
②anr:触摸事件超时5s,广播超时10s,service超时20s

检测工具

①java层crash,实现Thread.UncaughtException,捕捉异常
②anr发生时,系统会生成trace文件,低版本手机会有trace.txt文件,高版本手机在adb中,执行adb bugreport,可导出anr记录文件

保活方法,归根结底是提高进程优先级

①长连接保持心跳,保持进程活跃
②注册系统广播,相应系统消息
③使用syncadapter提供的账号同步机制提高进程优先级,demo地址https://github.com/dongdaniqng/SyncAdapter
④双进程,一像素,不推荐,流氓程序才这么干

5.耗电优化


耗电问题

①屏幕常亮
②频繁调用传感器,蓝牙,相机,定位,视频,音频等
③代码问题,频繁刷新,cpu使用率高,比如频繁刷新广告,刷新后台任务等

优化工具

①androidstudio profiler
②battery-historian

优化点

①及时关闭不再使用的传感器
②代码合理优化,使用workmanager或者jobscheduler优化任务

6.安装包体积优化


常用方案

①代码优化,使用混淆
②资源优化,使用android lint移除无用资源(存在误删,需要注意);配置shrinkResources;移除无用的lib,so,无用的assets目录文件
③图片优化,尽量使用一套图片文件,多个dimen尺寸文件;或者使用webp,svg图片
④插件化,将不频繁使用的模块存放到服务器,然后下载
⑤第三方框架择优使用

7.网络优化


①Dns:解析使用httpdns;直接使用ip
②Http :版本升级,比如从1.x升级到2.x,3.x,减少三次握手时间
③Https:升级ssl/tls加密协议版本,减少https的tls握手事件
④Cdn:使用cdn,缓存一些资源,加快访问速度

8.安全优化


本地安全

①敏感信息加密存储,使用keystore等,或者先加密再存储
②apk下载安装完整性校验,防劫持校验
③运行环境检查,如root,xposed环境
④安全键盘
⑤防止截屏
⑥代码安全检查,四大组件的权限等
⑦登录等隐私界面防劫持

网络安全

①使用https
②重要信息加密传输

上一篇下一篇

猜你喜欢

热点阅读