diff --git a/api/current.txt b/api/current.txt index 98674f939d56a..f51f345690aab 100644 --- a/api/current.txt +++ b/api/current.txt @@ -33984,31 +33984,31 @@ package android.opengl { package android.os { - public abstract class AsyncTask { - ctor public AsyncTask(); - method public final boolean cancel(boolean); - method @WorkerThread protected abstract Result doInBackground(Params...); - method @MainThread public final android.os.AsyncTask execute(Params...); - method @MainThread public static void execute(Runnable); - method @MainThread public final android.os.AsyncTask executeOnExecutor(java.util.concurrent.Executor, Params...); - method public final Result get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException; - method public final Result get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException; - method public final android.os.AsyncTask.Status getStatus(); - method public final boolean isCancelled(); - method @MainThread protected void onCancelled(Result); - method @MainThread protected void onCancelled(); - method @MainThread protected void onPostExecute(Result); - method @MainThread protected void onPreExecute(); - method @MainThread protected void onProgressUpdate(Progress...); - method @WorkerThread protected final void publishProgress(Progress...); - field public static final java.util.concurrent.Executor SERIAL_EXECUTOR; - field public static final java.util.concurrent.Executor THREAD_POOL_EXECUTOR; + @Deprecated public abstract class AsyncTask { + ctor @Deprecated public AsyncTask(); + method @Deprecated public final boolean cancel(boolean); + method @Deprecated @WorkerThread protected abstract Result doInBackground(Params...); + method @Deprecated @MainThread public final android.os.AsyncTask execute(Params...); + method @Deprecated @MainThread public static void execute(Runnable); + method @Deprecated @MainThread public final android.os.AsyncTask executeOnExecutor(java.util.concurrent.Executor, Params...); + method @Deprecated public final Result get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException; + method @Deprecated public final Result get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException; + method @Deprecated public final android.os.AsyncTask.Status getStatus(); + method @Deprecated public final boolean isCancelled(); + method @Deprecated @MainThread protected void onCancelled(Result); + method @Deprecated @MainThread protected void onCancelled(); + method @Deprecated @MainThread protected void onPostExecute(Result); + method @Deprecated @MainThread protected void onPreExecute(); + method @Deprecated @MainThread protected void onProgressUpdate(Progress...); + method @Deprecated @WorkerThread protected final void publishProgress(Progress...); + field @Deprecated public static final java.util.concurrent.Executor SERIAL_EXECUTOR; + field @Deprecated public static final java.util.concurrent.Executor THREAD_POOL_EXECUTOR; } - public enum AsyncTask.Status { - enum_constant public static final android.os.AsyncTask.Status FINISHED; - enum_constant public static final android.os.AsyncTask.Status PENDING; - enum_constant public static final android.os.AsyncTask.Status RUNNING; + @Deprecated public enum AsyncTask.Status { + enum_constant @Deprecated public static final android.os.AsyncTask.Status FINISHED; + enum_constant @Deprecated public static final android.os.AsyncTask.Status PENDING; + enum_constant @Deprecated public static final android.os.AsyncTask.Status RUNNING; } public class BadParcelableException extends android.util.AndroidRuntimeException { diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java index d259f386ea774..b37e176ddb6e7 100644 --- a/core/java/android/os/AsyncTask.java +++ b/core/java/android/os/AsyncTask.java @@ -38,9 +38,11 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; /** - *

AsyncTask enables proper and easy use of the UI thread. This class allows you - * to perform background operations and publish results on the UI thread without - * having to manipulate threads and/or handlers.

+ *

AsyncTask was intended to enable proper and easy use of the UI thread. However, the most + * common use case was for integrating into UI, and that would cause Context leaks, missed + * callbacks, or crashes on configuration changes. It also has inconsistent behavior on different + * versions of the platform, swallows exceptions from {@code doInBackground}, and does not provide + * much utility over using {@link Executor}s directly.

* *

AsyncTask is designed to be a helper class around {@link Thread} and {@link Handler} * and does not constitute a generic threading framework. AsyncTasks should ideally be @@ -188,7 +190,12 @@ import java.util.concurrent.atomic.AtomicInteger; *

If you truly want parallel execution, you can invoke * {@link #executeOnExecutor(java.util.concurrent.Executor, Object[])} with * {@link #THREAD_POOL_EXECUTOR}.

+ * + * @deprecated Use the standard java.util.concurrent or + * + * Kotlin concurrency utilities instead. */ +@Deprecated public abstract class AsyncTask { private static final String LOG_TAG = "AsyncTask"; @@ -240,7 +247,13 @@ public abstract class AsyncTask { /** * An {@link Executor} that can be used to execute tasks in parallel. + * + * @deprecated Using a single thread pool for a general purpose results in suboptimal behavior + * for different tasks. Small, CPU-bound tasks benefit from a bounded pool and queueing, and + * long-running blocking tasks, such as network operations, benefit from many threads. Use or + * create an {@link Executor} configured for your use case. */ + @Deprecated public static final Executor THREAD_POOL_EXECUTOR; static { @@ -254,7 +267,10 @@ public abstract class AsyncTask { /** * An {@link Executor} that executes tasks one at a time in serial * order. This serialization is global to a particular process. + * + * @deprecated Globally serializing tasks results in excessive queuing for unrelated operations. */ + @Deprecated public static final Executor SERIAL_EXECUTOR = new SerialExecutor(); private static final int MESSAGE_POST_RESULT = 0x1;