HandlersがAndroid/DalvikVMでどのように処理されているのでしょうか。 Android用のアプリケーションを作成しています。あるクラスでは、別のクラスのメッセージを受け取るHandlerメソッドがあります。ハンドラメソッドはスレッドとして動作し、同じクラスのrun()メソッドと非同期であるか、run()メソッドのコード行が終了するまで待つか(アトミック操作の一種)?または、他の何か?Android/DalvikVMはどのようにハンドラを処理しますか?
Handlerメソッドのキューにメッセージを追加し、run()メソッド(producer-consumer)でメッセージを処理して削除したいと思っています。
私のコードの構造:
public class Parser implements Runnable {
public void run() {
while(true) {
// Remove a byte from the ring buffer and parse it
byte b = Ringbuffer_read();
// Parse
try {
Thread.sleep(40);
} catch (InterruptedException e) {}
}
}
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_READ:
// Store all the received bytes in the ring buffer
for (int i = 0; i < msg.arg1; i++) {
Ringbuffer_store(((byte[]) msg.obj)[i]);
}
break;
}
}
};
}
ハンドラのコードが実行されますか?どの点でもrun()メソッドのコードを中断しますか?私は私のバッファを破壊しないようにrun()とハンドラメソッドのコードの周りにいくつかの同期やセマフォーなどを持たなければならないのですか?