先把结论放在前面:ContentProvider的onCreate在Application.onCreate之前执行。具体链路是attachBaseContext→installContentProviders(逐个创建 Provider)→Application.onCreate。这意味着任何写在 Provider 里的初始化都会被算进冷启动耗时,而它的执行时机又早于所有 Application 里的初始化逻辑。
面试里这题属于"一题定力"的题:答得浅的是"Provider 用于跨进程数据共享";答得深的是能说清installProviders的调用位置、installProvider的单例与多进程语义、initOrder排序规则,以及第三方 SDK 用 Provider 做自动初始化的连锁后果。
启动时序:Provider 早于 Application
LoadedApk.makeApplication() └─ Application.attach(context) → attachBaseContext └─ installContentProviders(...) → 逐个 Provider.onCreate() ← 这里 └─ Instrum