From f191f9a73b991e89065d9981bb79b0d29d2bb7ec Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Mon, 10 Aug 2020 15:40:46 +0800 Subject: [PATCH] Resume next activity if pausing app died If the top activity is crashed before showing any window, when its process reported dead, it will be regarded as no visible activity and no need to resume next activity. That may lead to the next top activity remains in paused state and may be unresponsive. Bug: 159951007 Test: atest ActivityTaskManagerServiceTests# \ testResumeNextActivityOnCrashedAppDied Change-Id: I635fceb9cf7b782f6ffbb9ebef7cb69053f64a0b --- .../core/java/com/android/server/wm/Task.java | 6 ++++- .../server/wm/WindowProcessController.java | 5 ++++- .../wm/ActivityTaskManagerServiceTests.java | 22 +++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index be0815b060515..2b6e5ef71f68b 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -7056,17 +7056,21 @@ class Task extends WindowContainer { /** * Reset local parameters because an app's activity died. * @param app The app of the activity that died. + * @return {@code true} if the process of the pausing activity is died. */ - void handleAppDied(WindowProcessController app) { + boolean handleAppDied(WindowProcessController app) { + boolean isPausingDied = false; if (mPausingActivity != null && mPausingActivity.app == app) { if (DEBUG_PAUSE || DEBUG_CLEANUP) Slog.v(TAG_PAUSE, "App died while pausing: " + mPausingActivity); mPausingActivity = null; + isPausingDied = true; } if (mLastPausedActivity != null && mLastPausedActivity.app == app) { mLastPausedActivity = null; mLastNoHistoryActivity = null; } + return isPausingDied; } boolean dump(FileDescriptor fd, PrintWriter pw, boolean dumpAll, boolean dumpClient, diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index 70c30c9180d7a..ab6e35b452a0f 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -1201,7 +1201,10 @@ public class WindowProcessController extends ConfigurationContainer