diff options
| author | 2023-08-08 21:51:06 +0000 | |
|---|---|---|
| committer | 2023-08-08 21:51:06 +0000 | |
| commit | 92351470046702118b3f27794d12d3f71bee7ec7 (patch) | |
| tree | 5c1eb59e41d99016c001e4e25471e92341297a45 | |
| parent | 336c012b6ecfb45f919229ea6c2b7604d79e443f (diff) | |
| parent | beef3189eaa76c7675b89ba5dc50bb8176603a72 (diff) | |
Merge "Defer service requests if the app hasn't finished startup" into udc-qpr-dev
| -rw-r--r-- | services/core/java/com/android/server/am/ActiveServices.java | 14 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ProcessRecord.java | 5 |
2 files changed, 12 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 3ccede4a000e..992c18a3fd65 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -5067,7 +5067,7 @@ public final class ActiveServices { boolean whileRestarting, boolean permissionsReviewRequired, boolean packageFrozen, boolean enqueueOomAdj) throws TransactionTooLargeException { - if (r.app != null && r.app.getThread() != null) { + if (r.app != null && r.app.isThreadReady()) { sendServiceArgsLocked(r, execInFg, false); return null; } @@ -5139,7 +5139,7 @@ public final class ActiveServices { final IApplicationThread thread = app.getThread(); final int pid = app.getPid(); final UidRecord uidRecord = app.getUidRecord(); - if (thread != null) { + if (app.isThreadReady()) { try { if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, @@ -5171,7 +5171,7 @@ public final class ActiveServices { final int pid = app.getPid(); final UidRecord uidRecord = app.getUidRecord(); r.isolationHostProc = app; - if (thread != null) { + if (app.isThreadReady()) { try { if (Trace.isTagEnabled(Trace.TRACE_TAG_ACTIVITY_MANAGER)) { Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, @@ -5571,7 +5571,7 @@ public final class ActiveServices { boolean oomAdjusted = false; // Tell the service that it has been unbound. - if (r.app != null && r.app.getThread() != null) { + if (r.app != null && r.app.isThreadReady()) { for (int i = r.bindings.size() - 1; i >= 0; i--) { IntentBindRecord ibr = r.bindings.valueAt(i); if (DEBUG_SERVICE) Slog.v(TAG_SERVICE, "Bringing down binding " + ibr @@ -5713,7 +5713,7 @@ public final class ActiveServices { mAm.mBatteryStatsService.noteServiceStopLaunch(r.appInfo.uid, r.name.getPackageName(), r.name.getClassName()); stopServiceAndUpdateAllowlistManagerLocked(r); - if (r.app.getThread() != null) { + if (r.app.isThreadReady()) { // Bump the process to the top of LRU list mAm.updateLruProcessLocked(r.app, false, null); updateServiceForegroundLocked(r.app.mServices, false); @@ -5877,7 +5877,7 @@ public final class ActiveServices { if (!c.serviceDead) { if (DEBUG_SERVICE) Slog.v(TAG_SERVICE, "Disconnecting binding " + b.intent + ": shouldUnbind=" + b.intent.hasBound); - if (s.app != null && s.app.getThread() != null && b.intent.apps.size() == 0 + if (s.app != null && s.app.isThreadReady() && b.intent.apps.size() == 0 && b.intent.hasBound) { try { bumpServiceExecutingLocked(s, false, "unbind", OOM_ADJ_REASON_UNBIND_SERVICE); @@ -6379,7 +6379,7 @@ public final class ActiveServices { sr.pendingStarts.add(new ServiceRecord.StartItem(sr, true, sr.getLastStartId(), baseIntent, null, 0, null, null, ActivityManager.PROCESS_STATE_UNKNOWN)); - if (sr.app != null && sr.app.getThread() != null) { + if (sr.app != null && sr.app.isThreadReady()) { // We always run in the foreground, since this is called as // part of the "remove task" UI operation. try { diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index f532122c10d9..f6acc41e4df3 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java @@ -770,6 +770,11 @@ class ProcessRecord implements WindowProcessListener { } @GuardedBy("mService") + boolean isThreadReady() { + return mThread != null && !mPendingFinishAttach; + } + + @GuardedBy("mService") long getStartSeq() { return mStartSeq; } |