diff options
| -rw-r--r-- | services/core/java/com/android/server/am/ActiveServices.java | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 48e3264b2c11..b0ab5390724b 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -3801,6 +3801,18 @@ public final class ActiveServices { @GuardedBy("mAm") void performScheduleRestartLocked(ServiceRecord r, @NonNull String scheduling, @NonNull String reason, @UptimeMillisLong long now) { + + // If the service is waiting to become a foreground service, remove the pending + // SERVICE_FOREGROUND_TIMEOUT_MSG msg, and set fgWaiting to false, so next time the service + // is brought up, scheduleServiceForegroundTransitionTimeoutLocked() can be called again and + // a new SERVICE_FOREGROUND_TIMEOUT_MSG is scheduled in SERVICE_START_FOREGROUND_TIMEOUT + // again. + if (r.fgRequired && r.fgWaiting) { + mAm.mHandler.removeMessages( + ActivityManagerService.SERVICE_FOREGROUND_TIMEOUT_MSG, r); + r.fgWaiting = false; + } + mAm.mHandler.removeCallbacks(r.restarter); mAm.mHandler.postAtTime(r.restarter, r.nextRestartTime); r.nextRestartTime = now + r.restartDelay; @@ -5678,7 +5690,7 @@ public final class ActiveServices { void serviceForegroundTimeout(ServiceRecord r) { ProcessRecord app; synchronized (mAm) { - if (!r.fgRequired || r.destroying) { + if (!r.fgRequired || !r.fgWaiting || r.destroying) { return; } |