summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/ActivityThread.java2
-rw-r--r--core/java/android/os/Message.java16
2 files changed, 16 insertions, 2 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 111689e..3a39900 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -4287,6 +4287,8 @@ public final class ActivityThread {
AsyncTask.setDefaultExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
+ Message.updateCheckRecycle(data.appInfo.targetSdkVersion);
+
/*
* Before spawning a new process, reset the time zone to be the system time zone.
* This needs to be done because the system time zone could have changed after the
diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java
index 1a5811c..b6b70cc 100644
--- a/core/java/android/os/Message.java
+++ b/core/java/android/os/Message.java
@@ -113,6 +113,8 @@ public final class Message implements Parcelable {
private static final int MAX_POOL_SIZE = 50;
+ private static boolean gCheckRecycle = true;
+
/**
* Return a new Message instance from the global pool. Allows us to
* avoid allocating new objects in many cases.
@@ -256,6 +258,13 @@ public final class Message implements Parcelable {
return m;
}
+ /** @hide */
+ public static void updateCheckRecycle(int targetSdkVersion) {
+ if (targetSdkVersion < Build.VERSION_CODES.L) {
+ gCheckRecycle = false;
+ }
+ }
+
/**
* Return a Message instance to the global pool.
* <p>
@@ -266,8 +275,11 @@ public final class Message implements Parcelable {
*/
public void recycle() {
if (isInUse()) {
- throw new IllegalStateException("This message cannot be recycled because it "
- + "is still in use.");
+ if (gCheckRecycle) {
+ throw new IllegalStateException("This message cannot be recycled because it "
+ + "is still in use.");
+ }
+ return;
}
recycleUnchecked();
}