Android persistent属性研究

前段时间在研究telephony时,一直没有在framework下发现对telephony的初始化(PhoneFactory.java中的makeDefaultPhones函数)的调用。结果全局搜索之后发现在application PhoneApp(packages/apps/Phone)中调用了。但是application PhoneApp既没有被Broadcast唤醒,也没有被其他service调用,那么是Android是通过什么方式来启动PhoneApp,所以就发现了属性android:persistent。

在AndroidManifest.xml定义中,application有这么一个属性android:persistent,根据字面意思来理解就是说该应用是可持久的,也即是常驻的应用。其实就是这么个理解,被android:persistent修饰的应用会在系统启动之后被AM启动。

AM首先去PM(PackageManagerService)中去查找设置了android:persistent的应用。

public void systemReady(final Runnable goingCallback) {               if (mFactoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) {                   try {                       List apps = AppGlobals.getPackageManager().                           getPersistentApplications(STOCK_PM_FLAGS);                       if (apps != null) {                           int N = apps.size();                           int i;                           for (i=0; i<N; i++) {                               ApplicationInfo info                                   = (ApplicationInfo)apps.get(i);                               if (info != null &&                                       !info.packageName.equals("android")) {                                   addAppLocked(info);                               }                           }                       }                   } catch (RemoteException ex) {                       // pm is in same process, this will never happen.                    }               }      }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwdfdz.html