zoukankan      html  css  js  c++  java
  • Android 性能优化总结

    App 流畅运行,是用户体验的第一步。App 流程运行,涉及到性能优化,主要涉及到布局优化, 绘制优化,内存泄漏优化,响应速度优化,列表展示优化,Bitmap 优化,线程优化,包大小优化。

    布局优化

    • 布局优化的思路是减少布局层次。
      • 同等层次的情况下,能使用 LinearLayout 和 FrameLayout 实现的效果,不用 ReleativeLayout 。
      • 布局复杂的情况,使用 LinearLyout 需要增加层次的情况下,使用 ReleativeLayout ,可以减少层次
      • 更加复杂的布局,使用约束布局 ContraintLayout
      • 使用 include 复用布局
      • include 配合 merge 减少层级
      • 使用 ViewStub 按需加载
    • 布局背景绘制
      • 不需要绘制背景的 View ,去掉背景图

    绘制优化

    • 绘制优化指在 View 的 onDraw 的操作优化
      • 不要在 onDraw 方法创建新的局部对象, onDraw 会比较频繁的调用,会创建大量的布局对象,不仅占用内存,而且系统更加频繁 gc
      • 不要在 onDraw 方法中执行耗时任务,也不能执行大量的循环操作,循环会大量占用 CPU 时间片,造成绘制不流畅。

    内存泄漏优化

    • 内存泄漏是 app 优化的一个重点,需要从两个方面重视
      1. 平时开发避免写有内存泄漏的代码
      2. 使用工具进行检测
    • 内存泄漏优化
      • 单列模式或静态变量造成内存泄漏 ---> 单例或者静态变量引用生命周期长的对象比如 Application 的 context
      • 集合造成内存泄漏 ---> 不使用的集合清空
      • 内部类或者匿名内部类造成内存泄漏 ---> 使用静态内部类或者外部类,或者使用弱引用
      • 资源使用完未关闭造成泄漏 ---> 使用完以后关闭,解绑观察者

    启动速度优化

    • 启动速度分为冷启动,热启动和温启动
    • 冷启动指应用程序从头开始,可能会出现白屏或者黑屏的情况,针对该问题的优化点
      • 在 Mainifest 文件给第一个 activity 设置一个带有背景的 theme ,这样就不会白屏或者黑屏的,体验比较的好点,但是治标不治本
      • 在 Application 中的初始化内容,能往后挪的就往后挪,能异步的就异步处理

    冷启动优化: https://developer.android.google.cn/topic/performance/vitals/launch-time

    响应速度优化

    • 不在 UI 线程做耗时操作,耗时操作异步处理
    • ANR
      • ANR 是指在 UI 线程做了耗时操作
        • Activity 5秒
        • BroadcastReceiver 10秒

    RecyclerView 优化

    • RecyclerView 作为 ListView 的继任者,针对 ViewHolder 做了缓存处理,但是针对大量的列表还是需要做优化的
      • 避免在 BindViewHolder 中执行耗时操作
      • 列表滑动过程中不适合开启大量的异步任务
      • 分页加载数据

    Bitmap 优化

    • Bitmap 是个吃内存大户,需要对 Bitmap 做好优化,Bitmap 优化比较简单
    • Bitmap 优化
      • 对图片质量压缩
      • 对图片尺寸压缩
      • 加载巨图,显示局部
      • 使用 .so 库进行压缩

    线程优化

    • 线程优化的思路是使用线程池,避免创建大量的 Thead,因为创建和销毁线程也需要花费时间的,使用线程池可以做到线程的复用。
    • 针对实际业务需求,做定制化的线程池

    包大小优化

    • 包的大小很关键,以我工作单位的包为例,目前已经到了53M 大小了,该项目在开始的时候才1M。53M下载安装还是很费流量和时间的。
    • 包大小优化
      • 压缩 png,jpg 资源
      • 能使用 XML 实现的效果,不使用图片
      • 把 png,jpg 转换为 webp
      • 删除无用的 drawable 资源
      • 删除 asset 无用资源
      • 开启代码混淆,即 minifyEnable = true ,开启混淆,会帮忙删除不用的代码,压缩和优化

    性能建议

    • 避免创建过多的对象
    • 不要过多使用枚举,枚举比整形内存占用空间大
    • 常量使用 static final 修饰
    • 使用 Android 特有的数据结构,比如 SparseArray
    • 适当使用 软引用和弱引用
    • 采用内存缓存和硬盘缓存
    • 尽量使用静态内部类,不要采用匿名内部类和内部类

    工具

  • 相关阅读:
    自己修改的两个js文件
    .net4缓存笔记
    使用.net的Cache框架快速实现Cache操作
    关于招聘面试(转)
    PHP中获取当前页面的完整URL
    Linux在本地使用yum安装软件(转)
    Phalcon的学习篇-phalcon和devtools的安装和设置
    GY的实验室
    aip接口中对url参数md5加密防篡改的原理
    nginx 多站点配置方法集合(转)
  • 原文地址:https://www.cnblogs.com/liyiran/p/9018032.html
Copyright © 2011-2022 走看看