summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/servertransaction/ActivityLifecycleItem.java15
-rw-r--r--core/java/android/app/servertransaction/ActivityTransactionItem.java40
-rw-r--r--core/java/android/app/servertransaction/DestroyActivityItem.java36
-rw-r--r--core/tests/coretests/src/android/app/servertransaction/ClientTransactionItemTest.java12
-rw-r--r--core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java5
-rw-r--r--core/tests/coretests/src/android/app/servertransaction/TransactionExecutorTests.java2
-rw-r--r--core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java5
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java4
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.