diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index aa79ab4fc6420..3612a9b361d8a 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -185,6 +185,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen static final int LOG_AM_SERVICE_CRASHED_TOO_MUCH = 30034; static final int LOG_AM_SCHEDULE_SERVICE_RESTART = 30035; static final int LOG_AM_PROVIDER_LOST_PROCESS = 30036; + static final int LOG_AM_PROCESS_START_TIMEOUT = 30037; static final int LOG_BOOT_PROGRESS_AMS_READY = 3040; static final int LOG_BOOT_PROGRESS_ENABLE_SCREEN = 3050; @@ -5199,13 +5200,23 @@ public final class ActivityManagerService extends ActivityManagerNative implemen if (gone) { Log.w(TAG, "Process " + app + " failed to attach"); + EventLog.writeEvent(LOG_AM_PROCESS_START_TIMEOUT, pid, app.info.uid, + app.processName); mProcessNames.remove(app.processName, app.info.uid); - Process.killProcess(pid); - if (mPendingBroadcast != null && mPendingBroadcast.curApp.pid == pid) { - Log.w(TAG, "Unattached app died before broadcast acknowledged, skipping"); - mPendingBroadcast = null; - scheduleBroadcastsLocked(); + // Take care of any launching providers waiting for this process. + checkAppInLaunchingProvidersLocked(app, true); + // Take care of any services that are waiting for the process. + for (int i=0; i