diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index d54ce4bd3f05a..e411e03a8a949 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -662,9 +662,11 @@ public interface IActivityManager extends IInterface { public void setRenderThread(int tid) throws RemoteException; /** - * Let's activity manager know whether the calling process is currently showing "top-level" UI + * Lets activity manager know whether the calling process is currently showing "top-level" UI * that is not an activity, i.e. windows on the screen the user is currently interacting with. * + *
This flag can only be set for persistent processes. + * * @param hasTopUi Whether the calling process has "top-level" UI. */ public void setHasTopUi(boolean hasTopUi) throws RemoteException; diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 8e4af12f2d0e8..1bc00fae5999d 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -12700,6 +12700,7 @@ public final class ActivityManagerService extends ActivityManagerNative return; } if (pr.hasTopUi != hasTopUi) { + Slog.i(TAG, "Setting hasTopUi=" + hasTopUi + " for pid=" + pid); pr.hasTopUi = hasTopUi; changed = true; } @@ -19189,10 +19190,14 @@ public final class ActivityManagerService extends ActivityManagerNative // facilitate this, here we need to determine whether or not it // is currently showing UI. app.systemNoUi = true; - if (app == TOP_APP || app.hasTopUi) { + if (app == TOP_APP) { app.systemNoUi = false; app.curSchedGroup = ProcessList.SCHED_GROUP_TOP_APP; app.adjType = "pers-top-activity"; + } else if (app.hasTopUi) { + app.systemNoUi = false; + app.curSchedGroup = ProcessList.SCHED_GROUP_TOP_APP; + app.adjType = "pers-top-ui"; } else if (activitiesSize > 0) { for (int j = 0; j < activitiesSize; j++) { final ActivityRecord r = app.activities.get(j); @@ -19218,7 +19223,7 @@ public final class ActivityManagerService extends ActivityManagerNative int procState; boolean foregroundActivities = false; BroadcastQueue queue; - if (app == TOP_APP || app.hasTopUi) { + if (app == TOP_APP) { // The last app on the list is the foreground app. adj = ProcessList.FOREGROUND_APP_ADJ; schedGroup = ProcessList.SCHED_GROUP_TOP_APP; diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index e74b3a32a2b81..3fffefbfe48a1 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java @@ -436,6 +436,9 @@ final class ProcessRecord { pw.print(prefix); pw.print(" - "); pw.println(receivers.valueAt(i)); } } + if (hasTopUi) { + pw.print(prefix); pw.print("hasTopUi="); pw.print(hasTopUi); + } } ProcessRecord(BatteryStatsImpl _batteryStats, ApplicationInfo _info,