我想知道处理程序是如何在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方法中有一些同步或信号量或代码,以便我不会损坏缓冲区?