diff options
8 files changed, 61 insertions, 58 deletions
diff --git a/core/java/android/app/servertransaction/ActivityLifecycleItem.java b/core/java/android/app/servertransaction/ActivityLifecycleItem.java index 48db18f4a1d7..d07ad46b0f24 100644 --- a/core/java/android/app/servertransaction/ActivityLifecycleItem.java +++ b/core/java/android/app/servertransaction/ActivityLifecycleItem.java @@ -18,6 +18,7 @@ package android.app.servertransaction; import android.annotation.IntDef; import android.annotation.NonNull; +import android.os.IBinder; import android.os.Parcel; import java.lang.annotation.Retention; @@ -25,6 +26,7 @@ import java.lang.annotation.RetentionPolicy; /** * Request for lifecycle state that an activity should reach. + * * @hide */ public abstract class ActivityLifecycleItem extends ActivityTransactionItem { @@ -52,8 +54,19 @@ public abstract class ActivityLifecycleItem extends ActivityTransactionItem { public static final int ON_DESTROY = 6; public static final int ON_RESTART = 7; - ActivityLifecycleItem() {} + ActivityLifecycleItem(@NonNull IBinder activityToken) { + super(activityToken); + } + + // TODO(b/311089192): Remove this method once no subclasses obtain from the object pool. + @Deprecated + ActivityLifecycleItem() { + super(); + } + + // Parcelable implementation + /** Reads from Parcel. */ ActivityLifecycleItem(@NonNull Parcel in) { super(in); } diff --git a/core/java/android/app/servertransaction/ActivityTransactionItem.java b/core/java/android/app/servertransaction/ActivityTransactionItem.java index b4ff476f4702..8ef86ee63c54 100644 --- a/core/java/android/app/servertransaction/ActivityTransactionItem.java +++ b/core/java/android/app/servertransaction/ActivityTransactionItem.java @@ -49,9 +49,29 @@ import java.util.Objects; public abstract class ActivityTransactionItem extends ClientTransactionItem { /** Target client activity. */ + // TODO(b/311089192): Mark this with @NonNull and final. private IBinder mActivityToken; - ActivityTransactionItem() {} + public ActivityTransactionItem(@NonNull IBinder activityToken) { + mActivityToken = requireNonNull(activityToken); + } + + // TODO(b/311089192): Remove this method once no subclasses obtain from the object pool. + @Deprecated + ActivityTransactionItem() { + } + + /** + * Sets the activity token after the instance is obtained from the object pool. + * + * @deprecated This method is deprecated. The object pool is no longer used. + * Instead, directly create a new object with the activity token. + * TODO(b/311089192): Remove this method once no subclasses obtain from the object pool. + */ + @Deprecated + void setActivityToken(@NonNull IBinder activityToken) { + mActivityToken = requireNonNull(activityToken); + } @Override public final void execute(@NonNull ClientTransactionHandler client, @@ -94,26 +114,18 @@ public abstract class ActivityTransactionItem extends ClientTransactionItem { return mActivityToken; } - void setActivityToken(@NonNull IBinder activityToken) { - mActivityToken = requireNonNull(activityToken); - } - - // To be overridden - - ActivityTransactionItem(@NonNull Parcel in) { - mActivityToken = in.readStrongBinder(); - } + // Parcelable implementation + /** Writes to Parcel. */ @CallSuper @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeStrongBinder(mActivityToken); } - @CallSuper - @Override - public void recycle() { - mActivityToken = null; + /** Reads from Parcel. */ + ActivityTransactionItem(@NonNull Parcel in) { + this(in.readStrongBinder()); } @Override diff --git a/core/java/android/app/servertransaction/DestroyActivityItem.java b/core/java/android/app/servertransaction/DestroyActivityItem.java index b0213d7356df..8a8114330cc4 100644 --- a/core/java/android/app/servertransaction/DestroyActivityItem.java +++ b/core/java/android/app/servertransaction/DestroyActivityItem.java @@ -28,11 +28,17 @@ import android.os.Trace; /** * Request to destroy an activity. + * * @hide */ public class DestroyActivityItem extends ActivityLifecycleItem { - private boolean mFinished; + private final boolean mFinished; + + public DestroyActivityItem(@NonNull IBinder activityToken, boolean finished) { + super(activityToken); + mFinished = finished; + } @Override public void preExecute(@NonNull ClientTransactionHandler client) { @@ -60,40 +66,16 @@ public class DestroyActivityItem extends ActivityLifecycleItem { return ON_DESTROY; } - // ObjectPoolItem implementation - - private DestroyActivityItem() {} - - /** Obtain an instance initialized with provided params. */ - @NonNull - public static DestroyActivityItem obtain(@NonNull IBinder activityToken, boolean finished) { - DestroyActivityItem instance = ObjectPool.obtain(DestroyActivityItem.class); - if (instance == null) { - instance = new DestroyActivityItem(); - } - instance.setActivityToken(activityToken); - instance.mFinished = finished; - - return instance; - } - - @Override - public void recycle() { - super.recycle(); - mFinished = false; - ObjectPool.recycle(this); - } - // Parcelable implementation - /** Write to Parcel. */ + /** Writes to Parcel. */ @Override public void writeToParcel(@NonNull Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeBoolean(mFinished); } - /** Read from Parcel. */ + /** Reads from Parcel. */ private DestroyActivityItem(@NonNull Parcel in) { super(in); mFinished = in.readBoolean(); diff --git a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java index ee7fa7c456a6..ff30f190bb05 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java +++ b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java @@ -102,8 +102,8 @@ public class ClientTransactionItemTest { @Test public void testDestroyActivityItem_preExecute() { - final DestroyActivityItem item = DestroyActivityItem - .obtain(mActivityToken, false /* finished */); + final DestroyActivityItem item = + new DestroyActivityItem(mActivityToken, false /* finished */); item.preExecute(mHandler); @@ -113,8 +113,8 @@ public class ClientTransactionItemTest { @Test public void testDestroyActivityItem_postExecute() { - final DestroyActivityItem item = DestroyActivityItem - .obtain(mActivityToken, false /* finished */); + final DestroyActivityItem item = + new DestroyActivityItem(mActivityToken, false /* finished */); item.preExecute(mHandler); item.postExecute(mHandler, mPendingActions); @@ -124,8 +124,8 @@ public class ClientTransactionItemTest { @Test public void testDestroyActivityItem_execute() { - final DestroyActivityItem item = DestroyActivityItem - .obtain(mActivityToken, false /* finished */); + final DestroyActivityItem item = + new DestroyActivityItem(mActivityToken, false /* finished */); item.execute(mHandler, mActivityClientRecord, mPendingActions); diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java index da88478efdfb..40f6aa0b8f79 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java @@ -90,11 +90,6 @@ public class ObjectPoolTests { } @Test - public void testRecycleDestroyActivityItem() { - testRecycle(() -> DestroyActivityItem.obtain(mActivityToken, true)); - } - - @Test public void testRecycleLaunchActivityItem() { final IBinder activityToken = new Binder(); final Intent intent = new Intent("action"); diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java index ad86e753435c..c2d56b65e95e 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java @@ -275,7 +275,7 @@ public class TransactionExecutorTests { final IBinder token = mock(IBinder.class); final ClientTransaction destroyTransaction = new ClientTransaction(); destroyTransaction.addTransactionItem( - DestroyActivityItem.obtain(token, false /* finished */)); + new DestroyActivityItem(token, false /* finished */)); destroyTransaction.preExecute(mTransactionHandler); // The activity should be added to to-be-destroyed container. assertEquals(1, activitiesToBeDestroyed.size()); diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java index e9950358065a..dafcf288382a 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java @@ -147,11 +147,12 @@ public class TransactionParcelTests { @Test public void testDestroy() { - DestroyActivityItem item = DestroyActivityItem.obtain(mActivityToken, true /* finished */); + final DestroyActivityItem item = + new DestroyActivityItem(mActivityToken, true /* finished */); writeAndPrepareForReading(item); // Read from parcel and assert - DestroyActivityItem result = DestroyActivityItem.CREATOR.createFromParcel(mParcel); + final DestroyActivityItem result = DestroyActivityItem.CREATOR.createFromParcel(mParcel); assertEquals(item.hashCode(), result.hashCode()); assertEquals(item, result); diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 516fc656ccb4..ee4deae21d4f 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -4078,8 +4078,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A try { if (DEBUG_SWITCH) Slog.i(TAG_SWITCH, "Destroying: " + this); - mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), - DestroyActivityItem.obtain(token, finishing)); + final DestroyActivityItem item = new DestroyActivityItem(token, finishing); + mAtmService.getLifecycleManager().scheduleTransactionItem(app.getThread(), item); } catch (Exception e) { // We can just ignore exceptions here... if the process has crashed, our death // notification will clean things up. |