Quel est le meilleur moyen d'utiliser un gestionnaire. Des avantages. Tous les exemples que j'ai rencontrés semblent donner la version en ligne.
Utiliser des outils ou p> à l'aide de la version de code en ligne p> Handler.Callback code> dans la méthode de la classe et de la mise en œuvre de la méthode d'interface. p>
private Handler mHandler = new Handler(){ ....};
4 Réponses :
Ce n'est vraiment pas une réponse à la question ci-dessus parce que je ne sais pas ce que "la meilleure façon" est, et cela dépend probablement de ce que vous faites. Cependant, je vais expliquer ce que je fais et pourquoi.
J'écris une application qui sert de contrôleur distant. Plusieurs activités vont interagir avec le dispositif contrôlé et différentes choses doivent se produire sur la base du résultat de la commande et de l'activité. Deux choses que je n'ai pas aimées à propos des manipulateurs sont a) qu'ils finissent par être une sorte de construction "lavabo de cuisine", mettant en œuvre des fonctionnalités de différentes sources, et b) qu'ils ont séparé une action (l'envoi de la commande dans mon cas) du traitement du résultat de cette action. Cependant, en utilisant un anonyme (terme de droite? Je suis un gestionnaire aussi noob.) En tant que paramètre, je me permet de garder la logique ensemble. Voici le pseudocode pour mon approche: p> (N'oubliez toujours que cela vaut probablement exactement ce que vous avez payé pour cela.;)) P> p>
Le terme commun ou ces définitions de classe en ligne sont des cours anonymes. P>
Vous pouvez en savoir plus sur la discussion sur ceux-ci dans Java / Android: classes locales anonymes vs nommés classes p >
Essentiellement, les principales différences sont la rétablissement, la vitesse du codage, la réutilisation et la portée. P>
à partir d'un point de vue de la ressource, la création de classe anonyme peut provoquer une surcharge dans le collecteur des ordures, comme indiqué dans Évitez de créer des objets inutiles . Je ne suis pas certain sur les détails exacts de la création de classe anonyme, cependant, il est logique que la mise en œuvre de l'interface de la classe est plus efficace. P>
@williamtmallard a fourni un exemple de ce que
http://developer.android.com/reference/andrroid/os/ Handler.html
logobar = (ImageView) findViewById(R.id.splash_bar);//progress bar. logobarClipe = (ClipDrawable) logobar.getBackground(); timer = new Timer(); timer.schedule(new TimerTask() { public void run() { updateLogoBarHandler.sendEmptyMessage(0); }}, 0, rate); /************************************************************************************** *2. Handler */ //update progress bar. private Handler updateLogoBarHandler = new Handler() { public void handleMessage(Message msg) { if(logobarClipe.getLevel() < 10000){ //1.update image. logobarClipe.setLevel(logobarClipe.getLevel() + rate*2); //2.update text. float percent = logobarClipe.getLevel() /100; String percentTxtVerbose = String.valueOf(percent); String percentTxt = percentTxtVerbose.substring(0, percentTxtVerbose.indexOf('.')) + "%"; bartxt.setText(percentTxt); }else{ timer.cancel(); } super.handleMessage(msg); } };
Il y a un danger pour utiliser des classes anonymes à Android. Comme décrit dans Ce blog post < / a> - en Java, les classes intérieures et anonymes non statiques sont implicites
référence à leur classe extérieure. p>
blockQuote> et voici une opportunité pour une fuite. P> Donc, la réponse courte serait la suivante: implémenter les méthodes d'interface ou utiliser des classes internes statiques (qui ne contiennent pas de référence de classe externe ). P> Par exemple, un gestionnaire de sécurité de fuites pourrait ressembler à ceci: p> J'ai fait un Blog post autour de l'utilisation des gestionnaires , alors pourrait valoir la valeur aussi bien :) p> p>