)
Android cold‑starts冷启动1. 严格定义Cold‑start系统中不存在该App进程系统从零新建进程完整启动App。触发场景只有两种手机开机后第一次点开AppApp进程被系统回收、被后台清理杀掉后再次打开后台无残留进程。对比另外两种启动模式模式前提核心区别耗时Cold‑start冷启动App进程不存在新建进程 初始化Application 重建Activity最长性能基准指标Warm‑start温启动进程存活、Activity被销毁只重建Activity不用新建进程中等Hot‑start热启动进程、Activity都还在内存仅执行onResume()切到前台最短2. 冷启动完整时序从点击桌面图标 → 首屏可交互分为系统阶段App应用阶段① 系统侧流程接收桌面点击事件通过IPC调用Process.start()Zygote进程fork出新的App进程系统先弹出空白白屏窗口Preview Window防止黑屏等待② App进程内主线程完整链路主线程串行执行任何阻塞都会拉长冷启动时间创建Application→attachBaseContext()→Application.onCreate()性能重灾区绝大多数SDK在这里初始化实例化ActivityThreadApp入口main函数启动主ActivityonCreate→onStart→onResumeinflate加载XML布局、测量‑布局‑绘制measure‑layout‑draw首帧渲染完成TTIDTime‑To‑Initial‑Display官方冷启动耗时终点系统替换掉空白窗口页面正式展示给用户。下面是一个简化的冷启动流程示意图App进程内主线程链路系统侧流程接收点击事件Process.start()Zygote fork出新进程弹出空白白屏窗口用户点击桌面图标创建Application(attachBaseContext, onCreate)实例化ActivityThread启动主Activity(onCreate, onStart, onResume)inflate布局(measure-layout-draw)首帧渲染完成(TTID)替换白屏页面展示首屏可交互3. 核心衡量指标TTIDTime to Initial Display首帧画面显示Android官方标准冷启动耗时日志关键字Displayed可抓取耗时。TTFDTime‑to‑Full‑Display首页所有数据、视图完全渲染完毕业务侧埋点指标。4. 冷启动最常见瓶颈90%问题集中在这里Application.onCreate()主线程串行初始化大量第三方SDK推送、埋点、IM、地图、统计、日志同步IO、数据库、SP读写、网络请求、静态代码块耗时阻塞主线程。首页布局层级太深、过度嵌套布局inflate耗时久。启动阶段创建大量临时对象频繁GC造成主线程卡顿。WebView、大图在主线程提前初始化。5. 核心优化思路开发标准方案Application瘦身优先级最高将初始化任务划分三类Must‑Sync必须主线程同步初始化崩溃监控、路由框架Can‑Delay子线程/IdleHandler延迟初始化埋点、推送等主线程空闲再执行Lazy‑Load按需懒加载地图、支付、音视频SDK用到再初始化布局优化用ConstraintLayout减少层级、ViewStub懒加载非必须视图。消除白屏自定义Launch主题替换默认空白窗口。高级优化App‑Startup库、基准配置文件(Profile)、Dex预优化、将WebView放到独立进程、异步预加载非核心资源。6. 调试工具Perfetto / Systrace可视化整条冷启动链路定位主线程耗时函数。adb命令直接抓取冷启动耗时adb shell am start‑W 包名/主Activity路径输出的TotalTime就是TTID冷启动耗时。我可以再帮你把这套内容压缩成面试版极简话术你要不要