From d3062cbf41664a09354528ea9e795a55a806c8c0 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Sat, 30 Jun 2018 02:06:42 +0800 Subject: Skip execution of transactions on a destroyed activity An Activity may not yet create on client side, there is another launch request with flags to clear task, then a destroy transaction is scheduled. If client side keeps blocking until destroy timeout, the token on server side will be removed. When client begins to handle the first creation, it will report its activity token to server that causes IllegalArgumentException because there is no matched ActivityRecord. Bug: 32375307 Test: atest FrameworksCoreTests:TransactionExecutorTests Change-Id: I1b7e0c2863b13091c3fd50df602ff31ae02ff38d --- core/java/android/app/ClientTransactionHandler.java | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'core/java/android/app/ClientTransactionHandler.java') diff --git a/core/java/android/app/ClientTransactionHandler.java b/core/java/android/app/ClientTransactionHandler.java index d9c7cf3ccc74..193f933df782 100644 --- a/core/java/android/app/ClientTransactionHandler.java +++ b/core/java/android/app/ClientTransactionHandler.java @@ -16,6 +16,7 @@ package android.app; import android.app.servertransaction.ClientTransaction; +import android.app.servertransaction.ClientTransactionItem; import android.app.servertransaction.PendingTransactionActions; import android.app.servertransaction.TransactionExecutor; import android.content.Intent; @@ -29,6 +30,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.content.ReferrerIntent; import java.util.List; +import java.util.Map; /** * Defines operations that a {@link android.app.servertransaction.ClientTransaction} or its items @@ -78,6 +80,9 @@ public abstract class ClientTransactionHandler { // Execute phase related logic and handlers. Methods here execute actual lifecycle transactions // and deliver callbacks. + /** Get activity and its corresponding transaction item which are going to destroy. */ + public abstract Map getActivitiesToBeDestroyed(); + /** Destroy the activity. */ public abstract void handleDestroyActivity(IBinder token, boolean finishing, int configChanges, boolean getNonConfigInstance, String reason); -- cgit v1.2.3