在重(万)要(恶)且漫长的性能优化道路上,启动优化我们最重要的第一步。作为用户交互最频繁的启动页面,如果总是白屏、闪屏、加载漫长,那么用户根本无心继续探索,更有甚者可能就直接把App卸载了,我们开发的各种精美功能也就无法与用户见面了(8s定律了解一下)。
所谓的启动优化,基本都是针对冷启动阶段,一般都是从两个方面着手处理。
启动主题优化
启动主题优化-所谓的主题优化,就是应用程序在冷启动的时候(1~2阶段),设置启动窗口的主题。因为现在 App 应用启动都会先进入一个闪屏页来展示应用信息。一般大家会通过透明主题优化、设置闪屏图片主题等方式来进行优化。其实这种方式并没有真正的加速应用进程的启动速度,只是通过用户视觉效果带来的优化体验,治标不治本。
代码优化
想要从根本上进行启动优化,我们还是要通过代码来解决问题。首先可以统计下程序冷启动的时间。一般我们可以通过adb 命令统计,还有就是系统日志统计。启动时间统计好之后,就是对Application 优化。
Application 作为应用程序的整个初始化配置入口,时常担负着它不应该有的负担。有很多第三方组件(包括App应用本身)都在 Application 中抢占先机,完成初始化操作。但是在 Application 中完成繁重的初始化操作和复杂的逻辑就会影响到应用的启动性能。
所以对于Application来说,采用异步或者延迟的方式进行加载是我们最常用的手段。
异步优化虽然逻辑上并不难,但实际操作过程中,还是会踩到很多坑:
-
代码不优雅:例如使用线程池实现多个并行异步任务时会有多个executorService.submit代码块
-
场景不好处理:各个初始化任务之间存在依赖关系,例如推送sdk的初始化任务需要依赖于获取设备id的初始化任务。此外,有些任务是需要在某些特定的时候就初始化完成,例如需要在Application的onCreate方法执行完之前就初始化完成
-
维护成本高
-
不符合异步要求
-
……
如何真正掌握启动优化
常用的启动优化手段虽然我们都有了解,但如果在面试中,只能用设置窗口背景,或同时采用异步或延迟的方式来回答启动优化问题,估计面试官肯定会让你回家。
在实际开发过程中,绝大多数的应用在启动过程中会包含很多基础 SDK,SDK 的初始化有着一定的先后顺序,业务 SDK 又是围绕着多个基础 SDK 建立的。那么如何保证这些 SDK 在正确的阶段、按照正确的依赖顺序、高效地初始化?怎么合理调度任务,才不至于让系统负载过高?如何最大化利用设备的性能,承接越来越多的业务?异步加载中线程的管理如何完成线程的同步异步?
为了帮助大家更好地掌握启动优化以及性能优化的关键核心,在这里给大家分享一份腾讯大佬历时三个月整理出来的《Android性能优化-大厂实战全解析》,我们可以看下已经在大厂中的开发者,对于性能优化有着怎样的心得:
目录
注:文章收集来源于各个大厂对外分享,按照各个大厂团队进行聚合,该文档仅用于学习使用。
腾讯团队
-
腾讯光影研究室—Android P之Smart Linkify
-
腾讯Bugly—动态下发 so 库在 Android APK 安装包瘦身方面的应用
-
QQ音乐—彻底弄懂浏览器缓存策略
-
QQ音乐Android编译提速之路
-
全民k歌适配arm64-v8a方案
-
全民K歌内存篇1——线上监控与综合治理
-
全民K歌内存篇2——虚拟内存浅析
-
全民K歌内存篇3——native内存分析与监控
-
腾讯Bugly—对字符串匹配算法的一点理解
-
…
字节团队
-
字节跳动技术团队— 深入理解Gradle框架之一:Plugin,Extension, buildSrc
-
字节跳动技术团队—深入理解gradle框架之二:依赖实现分析
-
字节跳动技术团队—Scene:Android 开源页面导航和组合框架
-
字节跳动技术团队—AwCookieManager.nativeGetCookiecrash 排查
-
字节跳动技术团队—另类 BadTokenException 问题分析和解决
-
字节跳动技术团队—抖音包大小优化-资源优化
-
字节跳动技术团队—二维码扫描优化
-
字节跳动—Android Camera内存问题剖析
-
抖音BoostMultiDex优化实践:Android低版本上APP首次启动时间减少80%
-
抖音BoostMultiDex优化实践:Android低版本上APP首次启动时间减少80%(二)
-
抖音 Android 性能优化系列:Java 内存优化篇
-
今日头条 Android ‘秒’ 级编译速度优化
-
…
阿里团队
-
支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」
-
支付宝 App 构建优化解析:通过安装包重排布优化 Android 端启动性能
-
支付宝 App 构建优化解析:Android 包大小极致压缩
-
解决支付宝包体积优化的遗留问题:运行时获取dexpc
-
闲鱼技术—曾梦想 if-else 走天涯?看看“责任树模式”优化
-
闲鱼如何在2个月内实现Android启动速度翻倍的?
-
高德技术—Android Native 内存泄漏系统化解决方案
-
天猫精灵技术—史上最全Android渲染机制讲解(长文源码深度剖析)
-
…
百度团队
-
百度APP-Android H5首屏优化实践
-
百度App技术—一种简单优雅的TextView行间距适配方案
-
百度App技术—Android 10分区存储介绍及百度APP适配实践
-
百度App技术—Gradle 与 Android 构建入门
-
百度App组件化之路
-
百度App网络深度优化系列《三》弱网优化
-
…
网易团队
-
网易新闻客户端 H5 秒开优化
-
网易新闻构建优化:如何让你的构建速度“势如闪电”
-
网易传媒技术团队—AOP技术在客户端的应用与实践
-
网易大数据|互联网产品决策秘笈: AB测试
-
…
美团团队
-
美团技术团队—Android静态代码扫描效率优化与实践
-
美团技术团队—Probe:Android线上OOM问题定位组件
-
美团技术团队—移动端UI一致性解决方案
-
美团—设计稿(UI视图)自动生成代码方案的探索
-
……
-
……
扫描下方卡片加助教小姐姐免费l领取