「整理」记录青春,工作中用到的 App 性能优化

28 篇文章 0 订阅
27 篇文章 0 订阅

前言

本篇总结整理工作中用到过的app 性能优化方案

流量优化

  1. 网络图片更换webp
  2. 三方库检测上报仅wifi环境上传
  3. 资源下载提示是否使用流量下载
  4. 合并http请求来减少http请求次数,避免二次请求
  5. 制定合理的http请求数据格式和返回数据格式,做到请求数据中没有冗余字段,有必要时做数据压缩
  6. url使用短链接传送
  7. 扩大本地图片缓存
  8. 地图可以做本地缓存
  9. 进行大数据量下载时,尽量使用GZIP方式下载

电量优化

  1. 减少唤醒设备操作,减少 timer
  2. 减少io操作。如数据库操作、SP操作(存在每次页面切换)、文件操作等
  3. 大量的计算,考虑移到后台处理,如拼音解析,排序
  4. 充电状态处理耗电任务,如数据迁移,处理、备份数据等
  5. 减少各种 senser 使用,如摇一摇、旋转、录音、GPS的使用场景
  6. 减少动画和透明 view,某些低端机甚至可以关闭动画
  7. 精简广播,精简高运算量算法
  8. 合并 http 请求来减少 http 请求次数,避免二次请求
  9. 制定合理的Http请求数据格式和返回数据格式,做到请求数据中没有冗余字段
  10. 在需要网络连接的程序中,首先检查网络连接是否正常,如果没有网络连接,那么就不需要执行相应的程序
  11. 目在进行大数据量下载时,尽量使用 GZIP 方式下载
  12. 回收 java 对象,特别是较大的 java 对像,使用 reset 方法
  13. 对定位要求不是太高的话尽量不要使用 GPS 定位,可能使用 wifi 和移动网络 cell 定位即可
  14. 尽量不要使用浮点运算
  15. 获取屏幕尺寸等信息可以使用缓存技术,不需要进行多次请求
  16. 使用 AlarmManager 来定时启动服务替代使用 sleep 方式的定时任务(如心跳服务)
  17. 减少高频刷新
  18. 谨慎使用 WakeLock

apk 瘦身

资源文件优化
  1. 使用一套资源 (如:切图只取1080p的资源放到xxhdpi目录)
  2. 开启 shrinkResources 去除无用资源
android {
    buildTypes {
        release {
            shrinkResources true
            }
        }
    } 
  1. 删除无用的语言资源
//无国际化支持计划,暂时只保留中文
android {
    defaultConfig {
        resConfigs "zh"
    }
} 
  1. 使用tinypng有损压缩
1. android打包本身会对png进行无损压缩,效果非常好,强烈推荐。Tinypng的官方网站:<http://tinypng.com/>
2. 通过tiny插件自动压缩:下载插件 Biu 
  1. 覆盖第三库里的大图 (有些第三库里引用了一些大图但是实际上并不会被我们用到,就可以考虑用1x1的透明图片覆盖)
  2. 表情包安装后下载
  3. 使用微信资源压缩打包工具

微信资源压缩打包工具通过短资源名称,采用7zip对APP进行极致压缩实现减小APP的目标,强烈推荐。详情参考:Android资源混淆工具使用说明;原理介绍:安装包立减1M–微信Android资源混淆打包工具

//建议开启7zip,注意白名单的配置,否则会导致有些资源找不到,官方已经发布AndResGuard到gradle中了:

apply plugin: 'AndResGuard'
buildscript {
    dependencies {
        classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.1.7'
    }
}
andResGuard {
    mappingFile = null
    use7zip = true
    useSign = true
    keepRoot = false
    // add <your_application_id>.R.drawable.icon into whitelist.
    // because the launcher will get thgge icon with his name
    def packageName = <your_application_id>
    whiteList = [
    //for your icon
    packageName + ".R.drawable.icon",
    //for fabric
    packageName + ".R.string.com.crashlytics.*",
    //for umeng update
    packageName + ".R.string.umeng*",
    packageName + ".R.string.UM*",
    packageName + ".R.string.tb_*",
    packageName + ".R.layout.umeng*",
    packageName + ".R.layout.tb_*",
    packageName + ".R.drawable.umeng*",
    packageName + ".R.drawable.tb_*",
    packageName + ".R.anim.umeng*",
    packageName + ".R.color.umeng*",
    packageName + ".R.color.tb_*",
    packageName + ".R.style.*UM*",
    packageName + ".R.style.umeng*",
    packageName + ".R.id.umeng*"
    ]
    compressFilePattern = [
    "*.png",
    "*.jpg",
    "*.jpeg",
    "*.gif",
    "resources.arsc"
    ]
    sevenzip {
    artifact = 'com.tencent.mm:SevenZip:1.1.7'
    //path = "/usr/local/bin/7za"
    }
}

//会生成一个andresguard/resguard的Task,自动读取release签名进行重新混淆打包。 
代码依赖库优化
  1. 去除无用三方库
  2. 避免为了使用一小部分功能引入整个三方库,将使用到的功能类进行选择性拷贝
  3. 移除功能类似的重复库
  4. lint 检查,去除无用文件和无效代码
其他
  1. 开启 minifyEnabled 混淆压缩代码,各个业务SDK独立混淆自己的模块,并保留混淆后的Mapping文件
  2. webp,VectorDrawable 图片替换

最后

有小伙伴私信问Compose的问题,好不好用啊,现在要不要学啊?

其实答案很简单,自从谷歌2019年公布了声明式UI框架Jetpack Compose后,两年多的时间,各种大力宣传,和大量资源的倾斜,API功能都趋于稳定了。

至于好不好用,各种用过的同行都是持肯定态度的。优势大概就是这四点:

强大的工具和直观的Kotlin API
简化并加速了Android上的UI开发
可以帮助开发者用更少更直观的代码创建View
有更强大的功能,以及还能提高开发速度

这么大的优势,毋庸置疑,肯定是要学的嘛,而且越快掌握越好。别等刀架到脖子上了,才去练金钟罩。

至于怎么快速上手,可以给大家免费分享一份**《Jetpack Compose 完全开发手册》**,手把手教大家从入门到精通。

第一章 初识 Jetpack Compose

  • 为什么我们需要一个新的UI 工具?

  • Jetpack Compose的着重点

    加速开发
    强大的UI工具
    直观的Kotlin API

图片

  • API 设计

图片

  • Compose API 的原则
    一切都是函数
    顶层函数(Top-level function)
    组合优于继承
    信任单一来源

图片

  • 深入了解Compose
    Core
    Foundation
    Material

图片

  • 插槽API

第二章 Jetpack Compose构建Android UI

  • Android Jetpack Compose 最全上手指南
    Jetpack Compose 环境准备和Hello World
    布局
    使用Material design 设计
    Compose 布局实时预览
    ……

图片

  • 深入详解 Jetpack Compose | 优化 UI 构建
    Compose 所解决的问题
    Composable 函数剖析
    声明式 UI
    组合 vs 继承
    封装
    重组
    ……

图片

  • 深入详解 Jetpack Compose | 实现原理
    @Composable 注解意味着什么?
    执行模式
    Positional Memoization (位置记忆化)
    存储参数
    重组
    ……

图片

第三章 Jetpack Compose 项目实战演练(附Demo)

  • Jetpack Compose应用1
    开始前的准备
    创建DEMO
    遇到的问题

图片

  • Jetpack Compose应用2
  • Jetpack Compose应用做一个倒计时器
    数据结构
    倒计时功能
    状态模式
    Compose 布局
    绘制时钟

图片

  • 用Jetpack Compose写一个玩安卓App
    准备工作
    引入依赖
    新建 Activity
    创建 Compose
    PlayTheme
    画页面
    底部导航栏
    管理状态
    添加页面

图片

  • 用Compose Android 写一个天气应用
    开篇
    画页面
    画背景
    画内容
    ……

图片

  • 用Compose快速打造一个“电影App”
    成品
    实现方案
    实战
    不足
    ……

图片

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
有需要的话可以点下面二维码免费领取↓↓↓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值