1) GUI에서 작업을 변경하기 위해 UI 스레드에 메시지를 보내고 2) UI 스레드에서 메시지를 수신하여 작업자 스레드를 제어 할 수있는 작업자 스레드를 만들고 싶습니다. 행동.자체 처리기/루퍼가있는 Android 작업자 스레드
첫 번째 부분은 쉽습니다. UI 스레드에서 처리기를 만들고 작업자 스레드에서 메시지를 보내도록합니다. 매력처럼 작동합니다. 작업자 스레드는 Thread.sleep()을 사용하여 효율적인 지연을 수행하고 "작업을 수행"하며 UI 스레드의 Handler에 업데이트를 보내고 반복합니다.
다음 부분은 Android에서 분명히 어렵습니다. 작업자 스레드는 메시지를 수신 할 수 있도록 처리기를 작성하는 Looper가 있어야하며 Looper.loop()은 차단 호출이므로 작업자 스레드가 Looper 실행에 100 % 커밋되어 다른 작업을 수행 할 수 없음을 의미합니다. ("할 일", 업데이트 메시지 보내기, 잠자기, 반복).
이것은 워커 스레드 용 루퍼를 실행하기 위해 제 3 스레드가 필요하다는 것을 의미합니다. 이는 우스꽝 스럽습니다. 작업자 스레드가 유용한 작업을 수행하고 메시지가 도착하면 메시지를 처리 할 수 있어야합니다. 이것은 최소한의 스레드 객체와 최소한의 오버 헤드로 효율적인 시스템을 만듭니다. Android에서이 동작을 구현하는 방법을 알 수 없습니다.
그래서 ... 어떻게 처리기 스레드가 처리기를 지원하고 유용한 다른 작업을 수행합니까? 감사!
훌륭함, 이것은 내가 찾고있는 것입니다. Windows의 완료 포트를 생각 나게하고 시간 초과 옵션을 설정합니다. 안드로이드의 문서는 안드로이드 중심이기 때문에 LinkedBlockingQueue에 대한 언급이 없습니다.RTFM을 즉시 시작하겠습니다 ... 감사합니다! – AndroidNewbie
@AndroidNewbie : "LinkedBlockingQueue에 대한 언급이 없습니다"- JavaDocs에 있습니다. 또한 책 "Java Concurrency in Practice"와 같은 다양한 Java 자원에 있습니다. – CommonsWare
하나의 질문이 남아 있습니다 : Java에 고유 한 여러 가지 차단 대기열 메커니즘이있는 이유는 무엇입니까? 왜 다른 여러 기존의 네이티브 옵션이있을 때 전체적으로 새로운 Handler/Looper 구조를 생성합니까? – AndroidNewbie