Ich frage mich, wie Handler in Android/DalvikVM verarbeitet werden. Ich schreibe eine Anwendung für Android, und in einer Klasse habe ich eine Handler-Methode, die Nachrichten von einer anderen Klasse empfängt. Funktioniert die Handler-Methode als Thread und ist asynchron zur run() - Methode in derselben Klasse oder wartet sie, bis eine Codezeile in der run() -Methode beendet ist (eine Art atomarer Vorgang)? Oder etwas anderes?Wie verarbeitet Android/DalvikVM Handler?
Ich frage mich, weil ich Nachrichten zu einer Warteschlange in der Handler-Methode hinzufügen und sie in der run() -Methode (Producer-Consumer) verarbeiten und entfernen möchte.
Meine Code-Struktur:
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;
}
}
};
}
Wann wird in der Prozedur der Code ausgeführt? Wird der Code in der run() -Methode zu irgendeinem Zeitpunkt unterbrochen? Muss ich in der run() - und handler-Methode eine Synchronisation oder Semaphore oder etwas um den Code herum haben, damit ich meinen Puffer nicht beschädige?