在Telephony分析系列中,我们分析过PhoneApp的启动,是通过ActivityThread中调用Instrumentation类的onCreate方法来逐步启动PhoneApp应用的,但是当我们在分析PhoneApp的时候,发现在PhoneGlobals的onCreate方法中,TelephonyProvider的数据库已经建立(在查找APN的相关数据的时候),那么TelephonyProvider究竟是在什么地方启动的呢,居然比PhoneApp类的onCreate方法还早,所以,就需要向PhoneApp的onCreate之前逐步寻找了
在ActivityThread在启动PhoneApp的时候,我们发现了一个方法
private void handleBindApplication(AppBindData data) {
......
// Allow disk access during application and provider setup. This could
// block processing ordered broadcasts, but later processing would
// probably end up doing the same disk access.
final StrictMode.ThreadPolicy savedPolicy = StrictMode.allowThreadDiskWrites();
try {
// If the app is being launched for full backup or restore, bring it up in
// a restricted environment with the base application class.
Application app = data.info.makeApplication(data.restrictedBackupMode, null);
mInitialApplication = app;
// don't bring up providers in restricted mode; they may depend on the
// app's custom Application class
if (!data.restrictedBackupMode) {
if (!ArrayUtils.isEmpty(data.providers)) {
// 初始化应用中所有的ContentProv