2010-05-14 3 views
2

이 질문은 existing question과 관련이 있습니다. 나는 다른 질문에 답하는 대신에 새로운 질문을하겠습니다.Android 다중 핸들러 디자인

"활동에 두 개 이상의 처리기가 있습니다." 왜? 복잡한 handleMessage() 방법을 사용하지 않으려면 post() (Handler 또는 View)을 사용하여 논리를 개별 Runnables으로 나눕니다. 복수 Handlers이 나를 긴장하게 만듭니다. - CommonsWare

나는 안드로이드 초보자입니다. 내 질문은 - 하나의 활동에 여러 개의 처리기가 나쁜 디자인을 갖는 것입니까?

다음은 현재 구현 된 스케치입니다.

데이터 스레드 (데이터를 수신하는 UDP 소켓)를 만드는 mapActivity이 있습니다. 내 첫 번째 처리기는 데이터 스레드에서 활동으로 데이터를 전송합니다.

지도에서 나는 종종 "동적"마커가 많으며 refreshed입니다. 이러한 마커 중 일부는 동영상 마커입니다. 즉, 사용자가 동영상 마커를 클릭하면 이 추가되어지도 활동에 android.opengl.GLSurfaceView을 추가하고이 새로운 동영상에 동영상을 표시합니다. 두 번째 처리기를 사용하여 사용자가 ItemizedOverlayonTap(int index) 메소드에서 탭한 마커에 대한 정보를 보냅니다.

사용자는 비디오보기를 눌러 비디오보기를 닫을 수 있습니다. 세 번째 처리기를 사용합니다.

사람들이이 접근법에있어 잘못된 점을 말하고이를 구현하는 더 좋은 방법을 제안 할 수 있으면 감사히 생각합니다.

감사합니다.

답변

3

이전 글에서 썼 듯이 다중 처리기 객체를 사용하지 않을 것입니다.

UDP를 소켓 스레드와 관련하여

, 당신은 당신이 Handler 기존 스틱, 또는 주 응용 프로그램 스레드에 Runnable를 게시하기 위해 MapViewpost()를 사용하거나 MapActivityrunOnUiThread()을 사용할 수 있습니다.

"사용자가 ItemizedOverlay onTap (int index) 메서드에서 탭한 마커에 대한 정보를 보내는 두 번째 처리기"와 관련하여 onTap()이 주 응용 프로그램 스레드에서 호출되므로 사용하지 않아도됩니다. Handler. 귀하의 세 번째 Handler도 마찬가지입니다.

+0

하지만 ... 나쁜 생각이라는 점을 제외하면 여러 개의 핸들러가 있다면 어떻게 될까요? 그들은 둘 다 모든 메시지를받습니다. 처음 선언 한 메시지는 오직 두 번째 메시지뿐입니다. 나는 둘 다 맞춰 봤지만 코드를 작성하지 않고도 나에게 답을 줄 수 있다면 행복 할 것이다! –

+1

@ type-a1pha : 위의 어느 것도 없습니다. 'Message'를 전송하는 프로토콜의 일부는 어떤 Handler가 메시지의 수신자가 될지를 나타냅니다. 따라서 처리되지 않은 Handler 객체의 수에 관계없이 어떤 Handler가 메시지를 얻는지는 의문의 여지가 없습니다. – CommonsWare

+0

그래 맞아 ... 나 한테 수치스러워! –