Merge "Ensure looper quits after all other messages are handled." into jb-mr2-dev
This commit is contained in:
@@ -201,8 +201,16 @@ public final class Looper {
|
||||
|
||||
/**
|
||||
* Quits the looper.
|
||||
*
|
||||
* Causes the {@link #loop} method to terminate as soon as possible.
|
||||
* <p>
|
||||
* Causes the {@link #loop} method to terminate as soon as all remaining messages
|
||||
* in the message queue that are already due to be delivered have been handled.
|
||||
* However delayed messages with due times in the future may not be handled before
|
||||
* the loop terminates.
|
||||
* </p><p>
|
||||
* Any attempt to post messages to the queue after {@link #quit} has been called
|
||||
* will fail. For example, the {@link Handler#sendMessage(Message)} method will
|
||||
* return false when the looper is being terminated.
|
||||
* </p>
|
||||
*/
|
||||
public void quit() {
|
||||
mQueue.quit();
|
||||
|
||||
@@ -132,11 +132,6 @@ public final class MessageQueue {
|
||||
nativePollOnce(mPtr, nextPollTimeoutMillis);
|
||||
|
||||
synchronized (this) {
|
||||
if (mQuiting) {
|
||||
dispose();
|
||||
return null;
|
||||
}
|
||||
|
||||
// Try to retrieve the next message. Return if found.
|
||||
final long now = SystemClock.uptimeMillis();
|
||||
Message prevMsg = null;
|
||||
@@ -170,6 +165,12 @@ public final class MessageQueue {
|
||||
nextPollTimeoutMillis = -1;
|
||||
}
|
||||
|
||||
// Process the quit message now that all pending messages have been handled.
|
||||
if (mQuiting) {
|
||||
dispose();
|
||||
return null;
|
||||
}
|
||||
|
||||
// If first time idle, then get the number of idlers to run.
|
||||
// Idle handles only run if the queue is empty or if the first message
|
||||
// in the queue (possibly a barrier) is due to be handled in the future.
|
||||
|
||||
Reference in New Issue
Block a user