1.什么是persist应用?

在AndroidManifest.xml中的applicationtag中定义:android:persistent="true"

在解析此应用时,给它增加一个flag:ApplicationInfo.FLAG_PERSISTENT

// PackageParser.java parseBaseApplication
if ((flags&PARSE_IS_SYSTEM) != 0) {    if (sa.getBoolean(            com.android.internal.R.styleable.AndroidManifestApplication_persistent,            false)) {        ai.flags |= ApplicationInfo.FLAG_PERSISTENT;    }}// ApplicationInfo.java/** * Value for {@link #flags}: set to true if this application is persistent. * Comes from {@link android.R.styleable#AndroidManifestApplication_persistent * android:persistent} of the <application> tag. */public static final int FLAG_PERSISTENT = 1<<3;

从注释可知,这代表此应用为persist app。


2.如何查询persit应用以及谁会去查询?

PackageManagerService.java提供了方法public List getPersistentApplications(int flags)可供查询.

依据就是查看哪个Application包含这个前面提到的flag:ApplicationInfo.FLAG_PERSISTENT

谁会查询或关注这点?

AMS会关注,在它的systemReady方法中调用,目的就是在system ready后启动这些persist应用。所以,他们会由系统自动启动,在BOOT_COMPLETED之前。

具体流程如下:

startOtherServices() //SystemServer.javasystemReady(final Runnable goingCallback) // ActivityManagerService.javaaddAppLocked(info, false, null /* ABI override */);startProcessLocked(app, "added application", app.processName, abiOverride, null /* entryPoint */, null /* entryPointArgs */);Process.start(...)

3.log信息

// system ready
06-05 21:14:29.620509   763   763 I SystemServer: Making services ready
06-05 21:14:29.640944   763   763 I ActivityManager: Start proc com.android.systemui for service com.android.systemui/.SystemUIService: pid=864 uid=10022 gids={50022, 1028, 1015, 1035, 3002, 3001, 3003, 1007}
06-05 21:14:29.641193   763   817 I MountService: handleSystemReady
06-05 21:14:29.943741   763   763 D UsbDeviceManager: systemReady
06-05 21:14:29.949129   763   763 D AppWidgetService: systemRunning
06-05 21:14:29.949196   763   763 I AppWidgetServiceImpl: u=0: systemReady
06-05 21:14:29.979798   763   763 V WallpaperManagerService: systemReady
06-05 21:14:30.069004   763   763 I RecoveryManagerService: systemReady()
// start persist app
06-05 21:14:30.243268   763   763 I ActivityManager: Start proc com.android.phone for added application com.android.phone: pid=1007 uid=1001 gids={41001, 3002, 3001, 3003, 1028, 1015, 1013, 1006, 1004, 2002, 1023}
06-05 21:14:30.262986   763   763 I ActivityManager: Start proc com.mediatek.voicecommand for added application com.mediatek.voicecommand: pid=1019 uid=10084 gids={50084, 1028, 1015, 1013, 1006}
06-05 21:14:30.273884   763   763 I ActivityManager: Start proc com.mediatek.bluetooth for added application com.mediatek.bluetooth: pid=1033 uid=1002 gids={41002, 3003, 3002, 3001, 1028, 1015, 3005, 1016, 3008, 1023, 1035}
06-05 21:14:30.322054   763   763 I ActivityManager: Start proc com.mediatek.voiceextension for added application com.mediatek.voiceextension: pid=1047 uid=1000 gids={41000, 1007, 1028, 1015, 3005, 3003, 3006, 1023, 3002, 3001}
06-05 21:14:30.416317   763   763 I ActivityManager: Start proc android.process.acore for added application android.process.acore: pid=1125 uid=10008 gids={50008, 3003, 1028, 1015}
06-05 21:14:30.434718   763   763 I ActivityManager: Start proc com.android.incallui for added application com.android.incallui: pid=1139 uid=10049 gids={50049, 3003, 1028, 1015}
// BOOT_COMPLETED
06-05 21:14:33.021543   763  1046 V ActivityManager: Broadcast: Intent { act=android.intent.action.BOOT_COMPLETED flg=0x8000010 (has extras) } ordered=true userid=0 callerApp=null

更多相关文章

  1. Android中的onCreateOptionsMenu()方法和onOptionsItemSelected()方
  2. 关于androidSDK更新缓慢的解决方法(以W7为例)
  3. 执行Android JUnit测试出现java.net.SocketException: Permissio
  4. [android]notifyDataSetChanged方法
  5. Android后台发送短信方法
  6. Android 检查应用是否安装、唤起的方法
  7. Could not find com.android.tools.build:aapt2:3.3.2-5309881.
  8. Android实现计时与倒计时的几种方法
  9. Android studio移动项目到另外一个文件夹,结果不能安装的解决方法

随机推荐

  1. Android中的Environment.getExternalStor
  2. Android(安卓)进程生命周期(Process Life
  3. android http://dl-ssl.google.com/andro
  4. android am命令
  5. roboguice - Android上的依赖注入框架
  6. Notification用法,注意API版本,API大于11的
  7. 启动android后没有应用图标,找不到应用程
  8. android 系统裁剪
  9. android开源库合集
  10. LinearLayout中android:layout_gravity="