@@ -123,6 +123,7 @@ public Handler() {
123123 }
124124 mQueue = mLooper .mQueue ;
125125 mCallback = null ;
126+ mAsynchronous = false ;
126127 }
127128
128129 /**
@@ -147,6 +148,7 @@ public Handler(Callback callback) {
147148 }
148149 mQueue = mLooper .mQueue ;
149150 mCallback = callback ;
151+ mAsynchronous = false ;
150152 }
151153
152154 /**
@@ -156,6 +158,7 @@ public Handler(Looper looper) {
156158 mLooper = looper ;
157159 mQueue = looper .mQueue ;
158160 mCallback = null ;
161+ mAsynchronous = false ;
159162 }
160163
161164 /**
@@ -166,6 +169,31 @@ public Handler(Looper looper, Callback callback) {
166169 mLooper = looper ;
167170 mQueue = looper .mQueue ;
168171 mCallback = callback ;
172+ mAsynchronous = false ;
173+ }
174+
175+ /**
176+ * Use the provided queue instead of the default one and take a callback
177+ * interface in which to handle messages. Also set whether the handler
178+ * should be asynchronous.
179+ *
180+ * Handlers are synchronous by default unless this constructor is used to make
181+ * one that is strictly asynchronous.
182+ *
183+ * Asynchronous messages represent interrupts or events that do not require global ordering
184+ * with represent to synchronous messages. Asynchronous messages are not subject to
185+ * the synchronization barriers introduced by {@link MessageQueue#enqueueSyncBarrier(long)}.
186+ *
187+ * @param async If true, the handler calls {@link Message#setAsynchronous(boolean)} for
188+ * each {@link Message} that is sent to it or {@link Runnable} that is posted to it.
189+ *
190+ * @hide
191+ */
192+ public Handler (Looper looper , Callback callback , boolean async ) {
193+ mLooper = looper ;
194+ mQueue = looper .mQueue ;
195+ mCallback = callback ;
196+ mAsynchronous = async ;
169197 }
170198
171199 /**
@@ -464,20 +492,15 @@ public final boolean sendMessageDelayed(Message msg, long delayMillis)
464492 * the looper is quit before the delivery time of the message
465493 * occurs then the message will be dropped.
466494 */
467- public boolean sendMessageAtTime (Message msg , long uptimeMillis )
468- {
469- boolean sent = false ;
495+ public boolean sendMessageAtTime (Message msg , long uptimeMillis ) {
470496 MessageQueue queue = mQueue ;
471- if (queue != null ) {
472- msg .target = this ;
473- sent = queue .enqueueMessage (msg , uptimeMillis );
474- }
475- else {
497+ if (queue == null ) {
476498 RuntimeException e = new RuntimeException (
477- this + " sendMessageAtTime() called with no mQueue" );
499+ this + " sendMessageAtTime() called with no mQueue" );
478500 Log .w ("Looper" , e .getMessage (), e );
501+ return false ;
479502 }
480- return sent ;
503+ return enqueueMessage ( queue , msg , uptimeMillis ) ;
481504 }
482505
483506 /**
@@ -492,20 +515,23 @@ public boolean sendMessageAtTime(Message msg, long uptimeMillis)
492515 * message queue. Returns false on failure, usually because the
493516 * looper processing the message queue is exiting.
494517 */
495- public final boolean sendMessageAtFrontOfQueue (Message msg )
496- {
497- boolean sent = false ;
518+ public final boolean sendMessageAtFrontOfQueue (Message msg ) {
498519 MessageQueue queue = mQueue ;
499- if (queue != null ) {
500- msg .target = this ;
501- sent = queue .enqueueMessage (msg , 0 );
502- }
503- else {
520+ if (queue == null ) {
504521 RuntimeException e = new RuntimeException (
505522 this + " sendMessageAtTime() called with no mQueue" );
506523 Log .w ("Looper" , e .getMessage (), e );
524+ return false ;
525+ }
526+ return enqueueMessage (queue , msg , 0 );
527+ }
528+
529+ private boolean enqueueMessage (MessageQueue queue , Message msg , long uptimeMillis ) {
530+ msg .target = this ;
531+ if (mAsynchronous ) {
532+ msg .setAsynchronous (true );
507533 }
508- return sent ;
534+ return queue . enqueueMessage ( msg , uptimeMillis ) ;
509535 }
510536
511537 /**
@@ -618,5 +644,6 @@ private static void handleCallback(Message message) {
618644 final MessageQueue mQueue ;
619645 final Looper mLooper ;
620646 final Callback mCallback ;
647+ final boolean mAsynchronous ;
621648 IMessenger mMessenger ;
622649}
0 commit comments