在本博客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中存在問題。如果我要創建一個真正的控制器,我需要將其委託給Activity中的控制器方法,如布爾dispatchKeyEvent(KeyEvent事件)。但是,因爲處理程序是異步的,我不知道KeyEvent是否實際處理過,並且不能返回適當的值。
相反,我選擇了從視圖通過我的事件只調用一個方法在控制器上像
boolean sendMessage(int what);
boolean sendMessage(int what, Object data);
這樣我可以從我的控制器立即得到相應的回報值,如果控制器需要處理這些異步它可以透明,我仍然可以得到一個迴應,消息將被處理現在或將來。
我的問題: 有過類似
controller.sendMessage(Controller.HANDLE_UPDATE);
什麼優勢可言並使用
controller.getHandler.sendEmptyMessage(Controller.HANDLE_UPDATE);
從MindTheRobot的辦法?
我沒有看到任何優勢,對我來說甚至好像他正在破解封裝,並且暴露了這個類的內部不必要的東西。
編輯: 好吧,更容易。你們用什麼方法將信息從視圖發送到控制器?
對我來說這個問題也很有趣 – drifter
我寫了一個博客系列回答這些類型的問題:http://www.therealjoshua.com/blog/ – user123321