Skip to content

Commit cbb722e

Browse files
author
Dianne Hackborn
committed
Don't wait for current activity to pause before resuming next.
We can do this now that we ensure processes are not killed until they have been stopped. If the two activities are in the same process, the ordering will still be correct because we schedule the pause before the resume. Change-Id: I209ba739b41e832d35db3edd34d1e7af354cc183
1 parent dc210ad commit cbb722e

File tree

3 files changed

+139
-88
lines changed

3 files changed

+139
-88
lines changed

services/java/com/android/server/am/ActivityManagerService.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@
138138
import java.lang.IllegalStateException;
139139
import java.lang.ref.WeakReference;
140140
import java.util.ArrayList;
141+
import java.util.Arrays;
141142
import java.util.Collection;
142143
import java.util.Collections;
143144
import java.util.Comparator;
@@ -3520,13 +3521,7 @@ private final void handleAppDiedLocked(ProcessRecord app,
35203521
}
35213522

35223523
// Just in case...
3523-
if (mMainStack.mPausingActivity != null && mMainStack.mPausingActivity.app == app) {
3524-
if (DEBUG_PAUSE) Slog.v(TAG, "App died while pausing: " +mMainStack.mPausingActivity);
3525-
mMainStack.mPausingActivity = null;
3526-
}
3527-
if (mMainStack.mLastPausedActivity != null && mMainStack.mLastPausedActivity.app == app) {
3528-
mMainStack.mLastPausedActivity = null;
3529-
}
3524+
mMainStack.appDiedLocked(app);
35303525

35313526
// Remove this application's activities from active lists.
35323527
mMainStack.removeHistoryRecordsForAppLocked(app);
@@ -7231,7 +7226,7 @@ public boolean shutdown(int timeout) {
72317226
mMainStack.stopIfSleepingLocked();
72327227
final long endTime = System.currentTimeMillis() + timeout;
72337228
while (mMainStack.mResumedActivity != null
7234-
|| mMainStack.mPausingActivity != null) {
7229+
|| mMainStack.mPausingActivities.size() > 0) {
72357230
long delay = endTime - System.currentTimeMillis();
72367231
if (delay <= 0) {
72377232
Slog.w(TAG, "Activity manager shutdown timed out");
@@ -9025,8 +9020,13 @@ boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
90259020
}
90269021

90279022
pw.println(" ");
9028-
if (mMainStack.mPausingActivity != null) {
9029-
pw.println(" mPausingActivity: " + mMainStack.mPausingActivity);
9023+
if (mMainStack.mPausingActivities.size() > 0) {
9024+
pw.println(" mPausingActivities: " + Arrays.toString(
9025+
mMainStack.mPausingActivities.toArray()));
9026+
}
9027+
if (mMainStack.mInputPausedActivities.size() > 0) {
9028+
pw.println(" mInputPausedActivities: " + Arrays.toString(
9029+
mMainStack.mInputPausedActivities.toArray()));
90309030
}
90319031
pw.println(" mResumedActivity: " + mMainStack.mResumedActivity);
90329032
pw.println(" mFocusedActivity: " + mFocusedActivity);
@@ -14759,7 +14759,13 @@ private final boolean updateOomAdjLocked(
1475914759
private final ActivityRecord resumedAppLocked() {
1476014760
ActivityRecord resumedActivity = mMainStack.mResumedActivity;
1476114761
if (resumedActivity == null || resumedActivity.app == null) {
14762-
resumedActivity = mMainStack.mPausingActivity;
14762+
for (int i=mMainStack.mPausingActivities.size()-1; i>=0; i--) {
14763+
ActivityRecord r = mMainStack.mPausingActivities.get(i);
14764+
if (r.app != null) {
14765+
resumedActivity = r;
14766+
break;
14767+
}
14768+
}
1476314769
if (resumedActivity == null || resumedActivity.app == null) {
1476414770
resumedActivity = mMainStack.topRunningActivityLocked(null);
1476514771
}

services/java/com/android/server/am/ActivityRecord.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,7 @@ public void stopFreezingScreenLocked(boolean force) {
602602

603603
public void windowsDrawn() {
604604
synchronized(service) {
605+
stack.reportActivityDrawnLocked(this);
605606
if (launchTime != 0) {
606607
final long curTime = SystemClock.uptimeMillis();
607608
final long thisTime = curTime - launchTime;
@@ -690,7 +691,9 @@ private ActivityRecord getWaitingHistoryRecordLocked() {
690691
// Hmmm, who might we be waiting for?
691692
r = stack.mResumedActivity;
692693
if (r == null) {
693-
r = stack.mPausingActivity;
694+
if (stack.mPausingActivities.size() > 0) {
695+
r = stack.mPausingActivities.get(stack.mPausingActivities.size()-1);
696+
}
694697
}
695698
// Both of those null? Fall back to 'this' again
696699
if (r == null) {

0 commit comments

Comments
 (0)