summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2019-03-17 01:02:11 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-03-17 01:02:11 +0000
commitb3e900902aa5e55ae27beb587223be9af9f7890a (patch)
treefa68e25b7d4658fe30960358d2be694913df97aa
parent2df78c38f8a9815338f7ab553d75ab6148886d43 (diff)
parentf2d598e1684a8b3ed793611f878fafc4f126e1ea (diff)
Merge "Allow transitioning through lifecycle when finished"
-rw-r--r--core/java/android/app/ActivityThread.java35
1 files changed, 10 insertions, 25 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 08239a1e7ed9..c0a702f28b8d 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -3115,10 +3115,6 @@ public final class ActivityThread extends ClientTransactionHandler {
if (!r.stopped) {
throw new IllegalStateException("Can't start activity that is not stopped.");
}
- if (r.activity.mFinished) {
- // TODO(lifecycler): How can this happen?
- return;
- }
// Start
activity.performStart("handleStartActivity");
@@ -3241,6 +3237,8 @@ public final class ActivityThread extends ClientTransactionHandler {
if (!r.activity.mFinished && pendingActions != null) {
pendingActions.setOldState(r.state);
pendingActions.setRestoreInstanceState(true);
+ }
+ if (pendingActions != null) {
pendingActions.setCallOnPostCreate(true);
}
} else {
@@ -3942,7 +3940,7 @@ public final class ActivityThread extends ClientTransactionHandler {
if (localLOGV) {
Slog.v(TAG, "Performing resume of " + r + " finished=" + r.activity.mFinished);
}
- if (r == null || r.activity.mFinished) {
+ if (r == null) {
return null;
}
if (r.getLifecycleState() == ON_RESUME) {
@@ -4212,12 +4210,6 @@ public final class ActivityThread extends ClientTransactionHandler {
private Bundle performPauseActivity(ActivityClientRecord r, boolean finished, String reason,
PendingTransactionActions pendingActions) {
if (r.paused) {
- if (r.activity.mFinished) {
- // If we are finishing, we won't call onResume() in certain cases.
- // So here we likewise don't want to call onPause() if the activity
- // isn't resumed.
- return null;
- }
RuntimeException e = new RuntimeException(
"Performing pause of activity that is not resumed: "
+ r.intent.getComponent().toShortString());
@@ -4337,20 +4329,13 @@ public final class ActivityThread extends ClientTransactionHandler {
boolean saveState, boolean finalStateRequest, String reason) {
if (localLOGV) Slog.v(TAG, "Performing stop of " + r);
if (r != null) {
- if (!keepShown && r.stopped) {
- if (r.activity.mFinished) {
- // If we are finishing, we won't call onResume() in certain
- // cases. So here we likewise don't want to call onStop()
- // if the activity isn't resumed.
- return;
- }
- if (!finalStateRequest) {
- final RuntimeException e = new RuntimeException(
- "Performing stop of activity that is already stopped: "
- + r.intent.getComponent().toShortString());
- Slog.e(TAG, e.getMessage(), e);
- Slog.e(TAG, r.getStateString());
- }
+ if (!keepShown && r.stopped && !finalStateRequest) {
+ // Double stop request is possible if activity receives 'sleep' followed by 'stop'.
+ final RuntimeException e = new RuntimeException(
+ "Performing stop of activity that is already stopped: "
+ + r.intent.getComponent().toShortString());
+ Slog.e(TAG, e.getMessage(), e);
+ Slog.e(TAG, r.getStateString());
}
// One must first be paused before stopped...