Bind background services to the top app correctly.

bug 27187310

Change-Id: I7d1ff989d7d36319b12dc20e3b25a47303729600
This commit is contained in:
Tim Murray
2016-02-18 14:59:22 -08:00
parent af326ed2b9
commit ba212c6bef

View File

@@ -18629,8 +18629,15 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
if ((cr.flags&Context.BIND_NOT_FOREGROUND) == 0) {
if (client.curSchedGroup == Process.THREAD_GROUP_DEFAULT) {
schedGroup = Process.THREAD_GROUP_DEFAULT;
// This will treat important bound services identically to
// the top app, which may behave differently than generic
// foreground work.
if (client.curSchedGroup > schedGroup) {
if ((cr.flags&Context.BIND_IMPORTANT) != 0) {
schedGroup = client.curSchedGroup;
} else {
schedGroup = Process.THREAD_GROUP_DEFAULT;
}
}
if (clientProcState <= ActivityManager.PROCESS_STATE_TOP) {
if (clientProcState == ActivityManager.PROCESS_STATE_TOP) {
@@ -18694,11 +18701,15 @@ public final class ActivityManagerService extends ActivityManagerNative
final ActivityRecord a = cr.activity;
if ((cr.flags&Context.BIND_ADJUST_WITH_ACTIVITY) != 0) {
if (a != null && adj > ProcessList.FOREGROUND_APP_ADJ &&
(a.visible || a.state == ActivityState.RESUMED
|| a.state == ActivityState.PAUSING)) {
(a.visible || a.state == ActivityState.RESUMED ||
a.state == ActivityState.PAUSING)) {
adj = ProcessList.FOREGROUND_APP_ADJ;
if ((cr.flags&Context.BIND_NOT_FOREGROUND) == 0) {
schedGroup = Process.THREAD_GROUP_DEFAULT;
if ((cr.flags&Context.BIND_IMPORTANT) != 0) {
schedGroup = Process.THREAD_GROUP_TOP_APP;
} else {
schedGroup = Process.THREAD_GROUP_DEFAULT;
}
}
app.cached = false;
app.adjType = "service";
@@ -18778,7 +18789,7 @@ public final class ActivityManagerService extends ActivityManagerNative
if (procState > clientProcState) {
procState = clientProcState;
}
if (client.curSchedGroup == Process.THREAD_GROUP_DEFAULT) {
if (client.curSchedGroup > schedGroup) {
schedGroup = Process.THREAD_GROUP_DEFAULT;
}
}