Comme le montre ce blog Mind The Robot, l'auteur suggère que le contrôleur obtient est des messages de la vue par un gestionnaire comme ceci:Android MVC: Envoi de messages au contrôleur
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);
En raison de la asynchrone de la méthode sendMessage et gestionnaire, je trouve cette approche problématique dans Android. Si je dois faire un vrai contrôleur, j'ai besoin de déléguer aux méthodes de contrôleur dans l'activité comme boolean dispatchKeyEvent (événement KeyEvent). Cependant, étant donné que le gestionnaire est asynchrone, je ne sais pas si KeyEvent a été traité et ne peut pas renvoyer une valeur appropriée.
J'ai plutôt choisi de passer mes événements de la vue avec juste appeler une méthode sur le contrôleur comme
boolean sendMessage(int what);
boolean sendMessage(int what, Object data);
De cette façon, je peux obtenir une bonne valeur de retour immédiatement de mon contrôleur et si le contrôleur doit gérer ces choses de manière asynchrone, cela peut être transparent et je peux toujours obtenir une réponse en retour que le message sera traité soit maintenant ou dans le futur.
Ma question: Quel est l'avantage du tout l'approche de l'aide MindTheRobot
controller.getHandler.sendEmptyMessage(Controller.HANDLE_UPDATE);
ont sur quelque chose comme
controller.sendMessage(Controller.HANDLE_UPDATE);
?
Je ne vois aucun avantage et pour moi il semble même qu'il brise l'encapsulation et expose inutilement les internes de cette classe.
EDIT: OK, quelque chose de plus facile. Quelle approche adoptez-vous pour envoyer des messages de vos vues à vos contrôleurs?
Pour moi cette question est aussi intéressante – drifter
J'ai écrit une série de blogs répondant à ces types de questions: http://www.therealjoshua.com/blog/ – user123321