android非同期メッセージ処理メカニズム
1114 ワード
Android非同期メッセージ処理は主に4つの部分から構成されている:Handler,Looper,Message,MessageQueue
Message:スレッド間で伝達されるメッセージで、内部で少量のメッセージを携帯できます.
MessageQueue:
Looper:各スレッドには最大1つのLooperオブジェクトしかありません.これはThreadLocal(スレッドローカルストレージオブジェクト)です.
(ThreadLocal:1つのスレッドがオブジェクトをローカルに格納することを実現し、1つの変数に対して、各スレッドはそれぞれの値を必要とし、すべてのスレッドは同じオブジェクトを共有するが、1つのスレッドの変数の変更は他のスレッドの変数の値に影響しない)
Looper内部ではMQが維持されており、loop()メソッドが呼び出されるとスレッドがキューからメッセージを取り出して実行し始める
Handler:1.メッセージの処理と送信に使用されます.
2.作成時にLooperとLooperのMQを関連付けます.
3.1つのスレッドには複数のHandlerがあります.
4.Handlerは任意のスレッドでメッセージを送信することができ、メッセージは関連するMQに追加される.
5.Handlerは、関連するLooperスレッドでメッセージを処理します.
Message:スレッド間で伝達されるメッセージで、内部で少量のメッセージを携帯できます.
MessageQueue:
Looper:各スレッドには最大1つのLooperオブジェクトしかありません.これはThreadLocal(スレッドローカルストレージオブジェクト)です.
(ThreadLocal:1つのスレッドがオブジェクトをローカルに格納することを実現し、1つの変数に対して、各スレッドはそれぞれの値を必要とし、すべてのスレッドは同じオブジェクトを共有するが、1つのスレッドの変数の変更は他のスレッドの変数の値に影響しない)
/**
* Implements a thread-local storage, that is, a variable for which each thread
* has its own value. All threads share the same
{@code
ThreadLocal} object,
* but each sees a different value when accessing it, and changes made by one
* thread do not affect the other threads. The implementation supports
*
{@code
null} values.
*
* @see java.lang.Thread
* @author Bob Lee
*/
Looper内部ではMQが維持されており、loop()メソッドが呼び出されるとスレッドがキューからメッセージを取り出して実行し始める
Handler:1.メッセージの処理と送信に使用されます.
2.作成時にLooperとLooperのMQを関連付けます.
3.1つのスレッドには複数のHandlerがあります.
4.Handlerは任意のスレッドでメッセージを送信することができ、メッセージは関連するMQに追加される.
5.Handlerは、関連するLooperスレッドでメッセージを処理します.