처리기가 Android/DalvikVM에서 처리되는 방법이 궁금합니다. Android 용 애플리케이션을 작성 중이며 한 클래스에서 다른 클래스의 메시지를 수신하는 Handler 메소드가있다. Handler 메서드는 Thread처럼 작동하고 같은 클래스의 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() 및 핸들러 메서드에서 코드 주변에 동기화 또는 세마포 또는 무언가가 있어야합니까?