我想知道處理程序是如何在Android/DalvikVM中處理的。我正在爲Android編寫一個應用程序,並且在一個類中我有一個Handler方法,它接收來自另一個類的消息。 Handler方法是作爲一個線程運行,並且與同一個類中的run()方法是異步的,還是等待run()方法中的一行代碼完成(原子操作)?或者是其他東西?Android/DalvikVM進程處理程序如何?
我想知道,因爲我想在Handler方法中將消息添加到隊列中,並在run()方法(生產者 - 消費者)中處理並刪除它們。
我的代碼結構:
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()和handler方法中有一些同步或信號量或代碼,以便我不會損壞緩衝區?