外观
ContentProvider 为何容易进入启动关键路径?
标准回答
应用进程绑定过程中会安装适用的 ContentProvider,许多库借此自动初始化;在常见主进程启动路径上,这些工作可能发生在 Application.onCreate 之前。只优化 onCreate 容易漏掉真正的前置耗时,还需确认 Provider 所属进程及初始化触发条件。
先查看合并后的 Manifest、Provider 的 onCreate 和依赖库版本,再用 Trace 确认实际耗时。若初始化包含磁盘、Binder、锁或类加载,继续追踪依赖;删除一个入口不代表下游首次使用不会重新触发。
改为延迟初始化之前,要明确首次使用点、线程要求、失败策略与并发一次性执行规则。调用方不能在未就绪时使用对象,也不能在首屏主线程重新等待同一项重工作。收益应体现在结束事件提前,而非仅把切片改了名字。
追问与回答
移到后台后启动仍然慢
可能首屏仍立即等待结果,或者后台任务与首屏争用 CPU、锁、磁盘。重新画依赖图和等待链。
自动初始化能否统一关闭
不能一概而论。AndroidX 初始器和任意厂商 Provider 的控制方式不同,必须核对库的受支持入口。
易混淆点
- 只观察 Application.onCreate 的耗时就宣称启动初始化完成。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q118