Loading api/current.txt +2 −2 Original line number Diff line number Diff line Loading @@ -34548,8 +34548,8 @@ package android.os { } public class Handler { ctor public Handler(); ctor public Handler(@Nullable android.os.Handler.Callback); ctor @Deprecated public Handler(); ctor @Deprecated public Handler(@Nullable android.os.Handler.Callback); ctor public Handler(@NonNull android.os.Looper); ctor public Handler(@NonNull android.os.Looper, @Nullable android.os.Handler.Callback); method @NonNull public static android.os.Handler createAsync(@NonNull android.os.Looper); core/java/android/os/Handler.java +27 −7 Original line number Diff line number Diff line Loading @@ -28,10 +28,9 @@ import java.lang.reflect.Modifier; * A Handler allows you to send and process {@link Message} and Runnable * objects associated with a thread's {@link MessageQueue}. Each Handler * instance is associated with a single thread and that thread's message * queue. When you create a new Handler, it is bound to the thread / * message queue of the thread that is creating it -- from that point on, * it will deliver messages and runnables to that message queue and execute * them as they come out of the message queue. * queue. When you create a new Handler it is bound to a {@link Looper}. * It will deliver messages and runnables to that Looper's message * queue and execute them on that Looper's thread. * * <p>There are two main uses for a Handler: (1) to schedule messages and * runnables to be executed at some point in the future; and (2) to enqueue Loading Loading @@ -114,7 +113,18 @@ public class Handler { * * If this thread does not have a looper, this handler won't be able to receive messages * so an exception is thrown. * * @deprecated Implicitly choosing a Looper during Handler construction can lead to bugs * where operations are silently lost (if the Handler is not expecting new tasks and quits), * crashes (if a handler is sometimes created on a thread without a Looper active), or race * conditions, where the thread a handler is associated with is not what the author * anticipated. Instead, use an {@link java.util.concurrent.Executor} or specify the Looper * explicitly, using {@link Looper#getMainLooper}, {link android.view.View#getHandler}, or * similar. If the implicit thread local behavior is required for compatibility, use * {@code new Handler(Looper.myLooper())} to make it clear to readers. * */ @Deprecated public Handler() { this(null, false); } Loading @@ -128,7 +138,17 @@ public class Handler { * so an exception is thrown. * * @param callback The callback interface in which to handle messages, or null. * * @deprecated Implicitly choosing a Looper during Handler construction can lead to bugs * where operations are silently lost (if the Handler is not expecting new tasks and quits), * crashes (if a handler is sometimes created on a thread without a Looper active), or race * conditions, where the thread a handler is associated with is not what the author * anticipated. Instead, use an {@link java.util.concurrent.Executor} or specify the Looper * explicitly, using {@link Looper#getMainLooper}, {link android.view.View#getHandler}, or * similar. If the implicit thread local behavior is required for compatibility, use * {@code new Handler(Looper.myLooper(), callback)} to make it clear to readers. */ @Deprecated public Handler(@Nullable Callback callback) { this(callback, false); } Loading Loading
api/current.txt +2 −2 Original line number Diff line number Diff line Loading @@ -34548,8 +34548,8 @@ package android.os { } public class Handler { ctor public Handler(); ctor public Handler(@Nullable android.os.Handler.Callback); ctor @Deprecated public Handler(); ctor @Deprecated public Handler(@Nullable android.os.Handler.Callback); ctor public Handler(@NonNull android.os.Looper); ctor public Handler(@NonNull android.os.Looper, @Nullable android.os.Handler.Callback); method @NonNull public static android.os.Handler createAsync(@NonNull android.os.Looper);
core/java/android/os/Handler.java +27 −7 Original line number Diff line number Diff line Loading @@ -28,10 +28,9 @@ import java.lang.reflect.Modifier; * A Handler allows you to send and process {@link Message} and Runnable * objects associated with a thread's {@link MessageQueue}. Each Handler * instance is associated with a single thread and that thread's message * queue. When you create a new Handler, it is bound to the thread / * message queue of the thread that is creating it -- from that point on, * it will deliver messages and runnables to that message queue and execute * them as they come out of the message queue. * queue. When you create a new Handler it is bound to a {@link Looper}. * It will deliver messages and runnables to that Looper's message * queue and execute them on that Looper's thread. * * <p>There are two main uses for a Handler: (1) to schedule messages and * runnables to be executed at some point in the future; and (2) to enqueue Loading Loading @@ -114,7 +113,18 @@ public class Handler { * * If this thread does not have a looper, this handler won't be able to receive messages * so an exception is thrown. * * @deprecated Implicitly choosing a Looper during Handler construction can lead to bugs * where operations are silently lost (if the Handler is not expecting new tasks and quits), * crashes (if a handler is sometimes created on a thread without a Looper active), or race * conditions, where the thread a handler is associated with is not what the author * anticipated. Instead, use an {@link java.util.concurrent.Executor} or specify the Looper * explicitly, using {@link Looper#getMainLooper}, {link android.view.View#getHandler}, or * similar. If the implicit thread local behavior is required for compatibility, use * {@code new Handler(Looper.myLooper())} to make it clear to readers. * */ @Deprecated public Handler() { this(null, false); } Loading @@ -128,7 +138,17 @@ public class Handler { * so an exception is thrown. * * @param callback The callback interface in which to handle messages, or null. * * @deprecated Implicitly choosing a Looper during Handler construction can lead to bugs * where operations are silently lost (if the Handler is not expecting new tasks and quits), * crashes (if a handler is sometimes created on a thread without a Looper active), or race * conditions, where the thread a handler is associated with is not what the author * anticipated. Instead, use an {@link java.util.concurrent.Executor} or specify the Looper * explicitly, using {@link Looper#getMainLooper}, {link android.view.View#getHandler}, or * similar. If the implicit thread local behavior is required for compatibility, use * {@code new Handler(Looper.myLooper(), callback)} to make it clear to readers. */ @Deprecated public Handler(@Nullable Callback callback) { this(callback, false); } Loading