android性能优化总结

1.绘制优化


卡顿造成原因:

  • 界面绘制:①页面复杂,层级较深,造成measure,layout,draw都有可能耗时较长,导致vsync信号到达时,数据无法准备好,无法刷新界面
  • 数据处理:①UI线程处理大量数据,导致主线程不能及时进行界面绘制;②内存紧张,导致频繁GC,会阻塞主线程

优化方式:

<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
②重要信息加密传输

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351