이 블로그의 Mind The Robot에서 볼 수 있듯이 저자는 컨트롤러가 다음과 같이 핸들러를 통해보기에서 메시지를 받았다고 제안합니다.Android MVC : 컨트롤러에 메시지 보내기
inboxHandlerThread = new HandlerThread("Controller Inbox"); // note you can also set a priority here
inboxHandlerThread.start();
// ... some code omitted ...
inboxHandler = new Handler(inboxHandlerThread.getLooper()) {
@Override
public void handleMessage(Message msg) {
Controller.this.handleMessage(msg);
}
};
// from the View
controller.getHandler.sendEmptyMessage(Controller.HANDLE_UPDATE);
sendMessage 메서드와 핸들러의 비동기로 인해 Android에서 문제가 발생했습니다. 실제 컨트롤러를 만들려면 boolean dispatchKeyEvent (KeyEvent 이벤트)와 같은 Activity의 컨트롤러 메서드에 위임해야합니다. 그러나 Handler가 비동기 적이기 때문에 KeyEvent가 실제로 처리되었고 적절한 값을 반환 할 수 있는지 여부는 알 수 없습니다.
대신보기에서 내 이벤트를 전달하기 위해
과 같은 컨트롤러에서 메서드를 호출하기로했습니다.이 방법을 사용하면 컨트롤러에서 즉시 적절한 반환 값을 얻을 수 있습니다. 비동기 적으로 이러한 메시지를 처리 할 수 있습니다. 투명하게 처리 할 수 있으며 메시지가 현재 또는 미래에 처리 될 것이라는 응답을받을 수 있습니다.
내 질문 :
controller.getHandler.sendEmptyMessage(Controller.HANDLE_UPDATE);
를 사용하는 MindTheRobot의 접근 방식은
controller.sendMessage(Controller.HANDLE_UPDATE);
과 비슷한 것을 가지고 있습니다.
어떤 장점도 보이지 않으며 캡슐화를 깨고이 클래스의 내부를 불필요하게 노출하는 것처럼 보입니다.
편집 : 좋아, 뭔가 쉽게. 뷰에서 컨트롤러로 메시지를 전송하기 위해 어떤 접근 방식을 취하고 있습니까?
나에게이 질문은 흥미 롭습니다. – drifter
나는 이런 종류의 문제에 대답하는 블로그 시리즈를 썼습니다 : http://www.therealjoshua.com/blog/ – user123321