美文网首页android项目知识点
android性能优化总结

android性能优化总结

作者: 牙膏很好吃 | 来源:发表于2019-12-31 18:56 被阅读0次

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

    相关文章

      网友评论

        本文标题:android性能优化总结

        本文链接:https://www.haomeiwen.com/subject/fzcloctx.html