Loading core/java/android/app/ActivityThread.java +0 −4 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ import static com.android.internal.annotations.VisibleForTesting.Visibility.PACK import android.annotation.NonNull; import android.annotation.Nullable; import android.app.RemoteServiceException.BadForegroundServiceNotificationException; import android.app.RemoteServiceException.CannotDeliverBroadcastException; import android.app.RemoteServiceException.CannotPostForegroundServiceNotificationException; import android.app.RemoteServiceException.CrashedByAdbException; import android.app.RemoteServiceException.ForegroundServiceDidNotStartInTimeException; Loading Loading @@ -1975,9 +1974,6 @@ public final class ActivityThread extends ClientTransactionHandler case ForegroundServiceDidNotStartInTimeException.TYPE_ID: throw generateForegroundServiceDidNotStartInTimeException(message, extras); case CannotDeliverBroadcastException.TYPE_ID: throw new CannotDeliverBroadcastException(message); case CannotPostForegroundServiceNotificationException.TYPE_ID: throw new CannotPostForegroundServiceNotificationException(message); Loading core/java/android/app/ApplicationExitInfo.java +12 −0 Original line number Diff line number Diff line Loading @@ -407,6 +407,15 @@ public final class ApplicationExitInfo implements Parcelable { */ public static final int SUBREASON_PACKAGE_UPDATE = 25; /** * The process was killed because of undelivered broadcasts; this would be set only when the * reason is {@link #REASON_OTHER}. * * For internal use only. * @hide */ public static final int SUBREASON_UNDELIVERED_BROADCAST = 26; // If there is any OEM code which involves additional app kill reasons, it should // be categorized in {@link #REASON_OTHER}, with subreason code starting from 1000. Loading Loading @@ -579,6 +588,7 @@ public final class ApplicationExitInfo implements Parcelable { SUBREASON_STOP_APP, SUBREASON_KILL_BACKGROUND, SUBREASON_PACKAGE_UPDATE, SUBREASON_UNDELIVERED_BROADCAST, }) @Retention(RetentionPolicy.SOURCE) public @interface SubReason {} Loading Loading @@ -1283,6 +1293,8 @@ public final class ApplicationExitInfo implements Parcelable { return "KILL BACKGROUND"; case SUBREASON_PACKAGE_UPDATE: return "PACKAGE UPDATE"; case SUBREASON_UNDELIVERED_BROADCAST: return "UNDELIVERED BROADCAST"; default: return "UNKNOWN"; } Loading core/java/android/app/RemoteServiceException.java +4 −19 Original line number Diff line number Diff line Loading @@ -70,21 +70,6 @@ public class RemoteServiceException extends AndroidRuntimeException { } } /** * Exception used to crash an app process when the system received a RemoteException * while delivering a broadcast to an app process. * * @hide */ public static class CannotDeliverBroadcastException extends RemoteServiceException { /** The type ID passed to {@link IApplicationThread#scheduleCrash}. */ public static final int TYPE_ID = 2; public CannotDeliverBroadcastException(String msg) { super(msg); } } /** * Exception used to crash an app process when the system received a RemoteException * while posting a notification of a foreground service. Loading @@ -94,7 +79,7 @@ public class RemoteServiceException extends AndroidRuntimeException { public static class CannotPostForegroundServiceNotificationException extends RemoteServiceException { /** The type ID passed to {@link IApplicationThread#scheduleCrash}. */ public static final int TYPE_ID = 3; public static final int TYPE_ID = 2; public CannotPostForegroundServiceNotificationException(String msg) { super(msg); Loading @@ -109,7 +94,7 @@ public class RemoteServiceException extends AndroidRuntimeException { */ public static class BadForegroundServiceNotificationException extends RemoteServiceException { /** The type ID passed to {@link IApplicationThread#scheduleCrash}. */ public static final int TYPE_ID = 4; public static final int TYPE_ID = 3; public BadForegroundServiceNotificationException(String msg) { super(msg); Loading @@ -125,7 +110,7 @@ public class RemoteServiceException extends AndroidRuntimeException { public static class MissingRequestPasswordComplexityPermissionException extends RemoteServiceException { /** The type ID passed to {@link IApplicationThread#scheduleCrash}. */ public static final int TYPE_ID = 5; public static final int TYPE_ID = 4; public MissingRequestPasswordComplexityPermissionException(String msg) { super(msg); Loading @@ -139,7 +124,7 @@ public class RemoteServiceException extends AndroidRuntimeException { */ public static class CrashedByAdbException extends RemoteServiceException { /** The type ID passed to {@link IApplicationThread#scheduleCrash}. */ public static final int TYPE_ID = 6; public static final int TYPE_ID = 5; public CrashedByAdbException(String msg) { super(msg); Loading services/core/java/com/android/server/am/BroadcastQueue.java +11 −12 Original line number Diff line number Diff line Loading @@ -45,10 +45,10 @@ import android.annotation.Nullable; import android.app.ActivityManager; import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.ApplicationExitInfo; import android.app.BroadcastOptions; import android.app.IApplicationThread; import android.app.PendingIntent; import android.app.RemoteServiceException.CannotDeliverBroadcastException; import android.app.usage.UsageEvents.Event; import android.app.usage.UsageStatsManagerInternal; import android.content.ComponentName; Loading Loading @@ -665,18 +665,14 @@ public final class BroadcastQueue { thread.scheduleRegisteredReceiver(receiver, intent, resultCode, data, extras, ordered, sticky, sendingUser, app.mState.getReportedProcState()); // TODO: Uncomment this when (b/28322359) is fixed and we aren't getting // DeadObjectException when the process isn't actually dead. //} catch (DeadObjectException ex) { // Failed to call into the process. It's dying so just let it die and move on. // throw ex; } catch (RemoteException ex) { // Failed to call into the process. It's either dying or wedged. Kill it gently. synchronized (mService) { Slog.w(TAG, "Can't deliver broadcast to " + app.processName + " (pid " + app.getPid() + "). Crashing it."); app.scheduleCrashLocked("can't deliver broadcast", CannotDeliverBroadcastException.TYPE_ID, /* extras=*/ null); final String msg = "Failed to schedule " + intent + " to " + receiver + " via " + app + ": " + ex; Slog.w(TAG, msg); app.killLocked("Can't deliver broadcast", ApplicationExitInfo.REASON_OTHER, ApplicationExitInfo.SUBREASON_UNDELIVERED_BROADCAST, true); } throw ex; } Loading Loading @@ -1890,8 +1886,11 @@ public final class BroadcastQueue { processCurBroadcastLocked(r, app); return; } catch (RemoteException e) { Slog.w(TAG, "Exception when sending broadcast to " + r.curComponent, e); final String msg = "Failed to schedule " + r.intent + " to " + info + " via " + app + ": " + e; Slog.w(TAG, msg); app.killLocked("Can't deliver broadcast", ApplicationExitInfo.REASON_OTHER, ApplicationExitInfo.SUBREASON_UNDELIVERED_BROADCAST, true); } catch (RuntimeException e) { Slog.wtf(TAG, "Failed sending broadcast to " + r.curComponent + " with " + r.intent, e); Loading Loading
core/java/android/app/ActivityThread.java +0 −4 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ import static com.android.internal.annotations.VisibleForTesting.Visibility.PACK import android.annotation.NonNull; import android.annotation.Nullable; import android.app.RemoteServiceException.BadForegroundServiceNotificationException; import android.app.RemoteServiceException.CannotDeliverBroadcastException; import android.app.RemoteServiceException.CannotPostForegroundServiceNotificationException; import android.app.RemoteServiceException.CrashedByAdbException; import android.app.RemoteServiceException.ForegroundServiceDidNotStartInTimeException; Loading Loading @@ -1975,9 +1974,6 @@ public final class ActivityThread extends ClientTransactionHandler case ForegroundServiceDidNotStartInTimeException.TYPE_ID: throw generateForegroundServiceDidNotStartInTimeException(message, extras); case CannotDeliverBroadcastException.TYPE_ID: throw new CannotDeliverBroadcastException(message); case CannotPostForegroundServiceNotificationException.TYPE_ID: throw new CannotPostForegroundServiceNotificationException(message); Loading
core/java/android/app/ApplicationExitInfo.java +12 −0 Original line number Diff line number Diff line Loading @@ -407,6 +407,15 @@ public final class ApplicationExitInfo implements Parcelable { */ public static final int SUBREASON_PACKAGE_UPDATE = 25; /** * The process was killed because of undelivered broadcasts; this would be set only when the * reason is {@link #REASON_OTHER}. * * For internal use only. * @hide */ public static final int SUBREASON_UNDELIVERED_BROADCAST = 26; // If there is any OEM code which involves additional app kill reasons, it should // be categorized in {@link #REASON_OTHER}, with subreason code starting from 1000. Loading Loading @@ -579,6 +588,7 @@ public final class ApplicationExitInfo implements Parcelable { SUBREASON_STOP_APP, SUBREASON_KILL_BACKGROUND, SUBREASON_PACKAGE_UPDATE, SUBREASON_UNDELIVERED_BROADCAST, }) @Retention(RetentionPolicy.SOURCE) public @interface SubReason {} Loading Loading @@ -1283,6 +1293,8 @@ public final class ApplicationExitInfo implements Parcelable { return "KILL BACKGROUND"; case SUBREASON_PACKAGE_UPDATE: return "PACKAGE UPDATE"; case SUBREASON_UNDELIVERED_BROADCAST: return "UNDELIVERED BROADCAST"; default: return "UNKNOWN"; } Loading
core/java/android/app/RemoteServiceException.java +4 −19 Original line number Diff line number Diff line Loading @@ -70,21 +70,6 @@ public class RemoteServiceException extends AndroidRuntimeException { } } /** * Exception used to crash an app process when the system received a RemoteException * while delivering a broadcast to an app process. * * @hide */ public static class CannotDeliverBroadcastException extends RemoteServiceException { /** The type ID passed to {@link IApplicationThread#scheduleCrash}. */ public static final int TYPE_ID = 2; public CannotDeliverBroadcastException(String msg) { super(msg); } } /** * Exception used to crash an app process when the system received a RemoteException * while posting a notification of a foreground service. Loading @@ -94,7 +79,7 @@ public class RemoteServiceException extends AndroidRuntimeException { public static class CannotPostForegroundServiceNotificationException extends RemoteServiceException { /** The type ID passed to {@link IApplicationThread#scheduleCrash}. */ public static final int TYPE_ID = 3; public static final int TYPE_ID = 2; public CannotPostForegroundServiceNotificationException(String msg) { super(msg); Loading @@ -109,7 +94,7 @@ public class RemoteServiceException extends AndroidRuntimeException { */ public static class BadForegroundServiceNotificationException extends RemoteServiceException { /** The type ID passed to {@link IApplicationThread#scheduleCrash}. */ public static final int TYPE_ID = 4; public static final int TYPE_ID = 3; public BadForegroundServiceNotificationException(String msg) { super(msg); Loading @@ -125,7 +110,7 @@ public class RemoteServiceException extends AndroidRuntimeException { public static class MissingRequestPasswordComplexityPermissionException extends RemoteServiceException { /** The type ID passed to {@link IApplicationThread#scheduleCrash}. */ public static final int TYPE_ID = 5; public static final int TYPE_ID = 4; public MissingRequestPasswordComplexityPermissionException(String msg) { super(msg); Loading @@ -139,7 +124,7 @@ public class RemoteServiceException extends AndroidRuntimeException { */ public static class CrashedByAdbException extends RemoteServiceException { /** The type ID passed to {@link IApplicationThread#scheduleCrash}. */ public static final int TYPE_ID = 6; public static final int TYPE_ID = 5; public CrashedByAdbException(String msg) { super(msg); Loading
services/core/java/com/android/server/am/BroadcastQueue.java +11 −12 Original line number Diff line number Diff line Loading @@ -45,10 +45,10 @@ import android.annotation.Nullable; import android.app.ActivityManager; import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.ApplicationExitInfo; import android.app.BroadcastOptions; import android.app.IApplicationThread; import android.app.PendingIntent; import android.app.RemoteServiceException.CannotDeliverBroadcastException; import android.app.usage.UsageEvents.Event; import android.app.usage.UsageStatsManagerInternal; import android.content.ComponentName; Loading Loading @@ -665,18 +665,14 @@ public final class BroadcastQueue { thread.scheduleRegisteredReceiver(receiver, intent, resultCode, data, extras, ordered, sticky, sendingUser, app.mState.getReportedProcState()); // TODO: Uncomment this when (b/28322359) is fixed and we aren't getting // DeadObjectException when the process isn't actually dead. //} catch (DeadObjectException ex) { // Failed to call into the process. It's dying so just let it die and move on. // throw ex; } catch (RemoteException ex) { // Failed to call into the process. It's either dying or wedged. Kill it gently. synchronized (mService) { Slog.w(TAG, "Can't deliver broadcast to " + app.processName + " (pid " + app.getPid() + "). Crashing it."); app.scheduleCrashLocked("can't deliver broadcast", CannotDeliverBroadcastException.TYPE_ID, /* extras=*/ null); final String msg = "Failed to schedule " + intent + " to " + receiver + " via " + app + ": " + ex; Slog.w(TAG, msg); app.killLocked("Can't deliver broadcast", ApplicationExitInfo.REASON_OTHER, ApplicationExitInfo.SUBREASON_UNDELIVERED_BROADCAST, true); } throw ex; } Loading Loading @@ -1890,8 +1886,11 @@ public final class BroadcastQueue { processCurBroadcastLocked(r, app); return; } catch (RemoteException e) { Slog.w(TAG, "Exception when sending broadcast to " + r.curComponent, e); final String msg = "Failed to schedule " + r.intent + " to " + info + " via " + app + ": " + e; Slog.w(TAG, msg); app.killLocked("Can't deliver broadcast", ApplicationExitInfo.REASON_OTHER, ApplicationExitInfo.SUBREASON_UNDELIVERED_BROADCAST, true); } catch (RuntimeException e) { Slog.wtf(TAG, "Failed sending broadcast to " + r.curComponent + " with " + r.intent, e); Loading