外观
如何理解AndroidX App Startup 的依赖与手动初始化?
标准回答
AndroidX App Startup 通过 Initializer 声明创建逻辑和依赖。自动发现与依赖调用共同决定初始化发生的时机:禁用某项自动发现后,它仍可能被另一个初始化器作为依赖拉起。应检查完整依赖图而非单个 Manifest 标记。
需要手动控制时,按官方方式移除对应自动发现元数据,再在业务可接受的位置调用 AppInitializer 初始化。移除整个初始化 Provider 会影响该入口承载的所有组件,改动范围更大;这套方法不自动适用于其他 SDK 自定义的 Provider。
工程上先分为首屏必需、首屏后短期必需和按需使用三类,为每类安排期限与失败处理。初始化过程必须有明确的线程语义和幂等状态,不把“已提交线程池”作为“初始化成功”。
追问与回答
依赖出现环怎么办
应在设计或验证阶段拒绝循环,将共同依赖下沉,或拆成创建与启动两个阶段;不能靠延迟某一条边掩盖永远无法满足的依赖。
初始化失败是否应自动重试
只对暂时性错误进行有界重试;配置或权限错误应暴露诊断。重试状态不能让后续调用拿到半初始化对象。
易混淆点
- 认为移除一个 meta-data 就能保证组件永远不在首屏初始化。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q119