2017-01-12 2 views
0

내 응용 프로그램에는 매우 간단한 객체 - 메시지 처리 (파이프 라인 아키텍처)에 대해 while-on-volatile-boolean 루프와 BlockingQueue의 스레드가 거의 없습니다.Producer-Consumer 패턴에 Looper를 사용하면 어떤 이점이 있습니까?

최근에 필자는 동일한 작업을 수행하는 것으로 보이는 친구들과 android.os.Looper 클래스를 만났지 만 API에 배치되었으므로 명시 적 대기열이있는 필기체 루프 대신 이들을 사용하면 어떤 이점 (특히 성능)이 있습니까? 아니면 단지 API 설탕일까요?

답변

2

Looper은 메시지가 게시 될 때까지 대기하는 일반적인 Java 스레드입니다. LooperHandler 클래스 및클래스와 함께 사용됩니다. 핸들러는 Looper 스레드에 메시지를 게시합니다. Looper 스레드는 스레드를 활성 상태로 유지하고 Handler가 게시 한 메시지를 반복합니다.

성능면에서 내가 아는 한 이점은 없을 것입니다. 간단하게 스레드를 유지하고 스레드에 메시지를 게시하는 것입니다. API 관점에서 볼 때 Handler를 사용하는 것이 더 쉽습니다. 모두 동일한 루퍼를 공유하는 여러 핸들러를 만들 수 있습니다. 루퍼에게 thread-safe 방식으로 게시하도록하십시오. Handler#postDelayed과 같은 편리한 타이밍 메시지도 있습니다. 따라서 걱정할 필요가 적은 코드 일뿐입니다.

단점은 Android 전용 API이므로 해당 환경에 제한된다는 것입니다.

+1

다른 큰 차이점 - 핸들러를 통해 일반 Runnable을 루퍼에 게시 할 수 있습니다. 일반적으로 메시지 처리기를 작성할 때는 그렇게하지 않습니다 (일반적으로 특정 메시지에 코드를 작성할 수 있습니다). 그것은 긍정적이거나 부정적입니다. –

+0

@GabeSechan 잘 'ExecutorService'에서도 가능합니다. – Pavlus

+0

타이밍 메시지에 대해 알아 줘서 고마워, 나는 그'Handler' 클래스가 복잡하다는 점을 놓쳤다. 따라서 지능형 메시지 대기열이 필요할 때 실제로 사용됩니다. – Pavlus