From c8e20e0b242e41bfc9bcfad89df874aa5b15cc4a Mon Sep 17 00:00:00 2001 From: Jeff Chang Date: Fri, 27 Dec 2019 16:15:09 +0800 Subject: [PATCH] Simplify the activity lifecycle from START to STOP When the life cycle of activity stay in START state and plan to STOP state soon. We can jump to the STOP state directly instead of going through the RESUME and PAUSE state. Basically, applications like to do things on RESUME state, we don't need to let application to handle the case because it already plan to STOP. This CL simplify the lifecycle path for the condition and update the related test case. Bug: 143125452 Test: atest TransactionExecutorTests atest ActivityLifecycleTests Change-Id: Id4164eae211587a2dd4e845970ef41cc38ce430d --- .../servertransaction/TransactionExecutorHelper.java | 12 +++++++++--- .../servertransaction/TransactionExecutorTests.java | 6 ++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/core/java/android/app/servertransaction/TransactionExecutorHelper.java b/core/java/android/app/servertransaction/TransactionExecutorHelper.java index 0ea8c3c159fa3..f690aa5f9746f 100644 --- a/core/java/android/app/servertransaction/TransactionExecutorHelper.java +++ b/core/java/android/app/servertransaction/TransactionExecutorHelper.java @@ -75,9 +75,15 @@ public class TransactionExecutorHelper { mLifecycleSequence.clear(); if (finish >= start) { - // just go there - for (int i = start + 1; i <= finish; i++) { - mLifecycleSequence.add(i); + if (start == ON_START && finish == ON_STOP) { + // A case when we from start to stop state soon, we don't need to go + // through the resumed, paused state. + mLifecycleSequence.add(ON_STOP); + } else { + // just go there + for (int i = start + 1; i <= finish; i++) { + mLifecycleSequence.add(i); + } } } else { // finish < start, can't just cycle down if (start == ON_PAUSE && finish == ON_RESUME) { diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java index 1410f4f1bf72f..09ea1b1865c0d 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java @@ -124,7 +124,7 @@ public class TransactionExecutorTests { assertArrayEquals(new int[] {}, path(ON_START)); assertArrayEquals(new int[] {ON_RESUME}, path(ON_RESUME)); assertArrayEquals(new int[] {ON_RESUME, ON_PAUSE}, path(ON_PAUSE)); - assertArrayEquals(new int[] {ON_RESUME, ON_PAUSE, ON_STOP}, path(ON_STOP)); + assertArrayEquals(new int[] {ON_STOP}, path(ON_STOP)); assertArrayEquals(new int[] {ON_RESUME, ON_PAUSE, ON_STOP, ON_DESTROY}, path(ON_DESTROY)); } @@ -362,7 +362,9 @@ public class TransactionExecutorTests { public void testClosestStateResolutionFromOnStart() { mClientRecord.setState(ON_START); assertEquals(ON_RESUME, mExecutorHelper.getClosestOfStates(mClientRecord, shuffledArray( - new int[] {ON_CREATE, ON_RESUME, ON_PAUSE, ON_STOP, ON_DESTROY}))); + new int[] {ON_CREATE, ON_RESUME, ON_PAUSE, ON_DESTROY}))); + assertEquals(ON_STOP, mExecutorHelper.getClosestOfStates(mClientRecord, shuffledArray( + new int[] {ON_STOP}))); assertEquals(ON_CREATE, mExecutorHelper.getClosestOfStates(mClientRecord, shuffledArray( new int[] {ON_CREATE}))); }