2012-01-14 5 views
1

J'écris ma première application Android et je veux apprendre de bonnes pratiques de codage. J'ai une activité qui contient les éléments suivants:Android - Quelle est la meilleure façon d'utiliser les activités (meilleure pratique)

Button btn = (Button)findViewById(R.id.btnPressMe); 

     btn.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       startActivity(new Intent(Main.this, SecondScreen.class)); 
      } 
     }); 

ou

startActivity(new Intent("net.mysite.MediaPlayer.CLEARSCREEN")); 

AndroidManifest.xml:

<activity 
     android:name=".landingpage" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="net.mysite.MediaPlayer.CLEARSCREEN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

Répondre

1

Abu,

La réponse à votre question dépend en grande partie de ce que vous essayez d'accomplir. Gardez à l'esprit que les autres réponses fournies jusqu'ici ont une contribution précieuse pour prendre votre décision.

L'Android Philosophie

Android est conçu de telle sorte que l'utilisateur décide en fin de compte que les applications prennent en charge les tâches. Les applications peuvent les dépasser, mais ne doivent le faire que si elles sont les seules à pouvoir raisonnablement prendre en charge cette tâche ou si cela est nécessaire pour le fonctionnement de l'application dans son ensemble.

Un Intent indique la volonté de l'utilisateur ou du système ou d'une application d'exécuter cette tâche. Tout simplement parce qu'un Intent est fait ne nécessite pas que l'utilisateur le sache ou l'initie, même si c'est souvent le meilleur. Cependant, si l'Intention est cachée à l'Utilisateur, on peut se demander s'il ne s'agit pas du tout d'une Intention. C'est quelque chose qui est encore en train d'être élaboré par la communauté du développement et il y a des avocats pour et contre la pratique.

Classe statique Intentions

startActivity (nouvelle intention (Main.this, SecondScreen.class));

Elles doivent être utilisées lorsque vous ne pouvez pas faire confiance à une autre application pour gérer efficacement la tâche souhaitée. Ces types de tâches doivent également être "cachés" à l'utilisateur, car l'utilisateur peut ne pas se soucier de ce qui se passe ou qui le fait, tant que cela est fait. De plus, ils ne doivent être utilisés que pour un code stable qui n'est pas soumis à des modifications. Comme Snicolas déclaré (et je suis personnellement d'accord):

Les classes peuvent varier dans la vie d'une application.

action cordes Intentions

startActivity (nouvelle intention ("net.mysite.MediaPlayer.CLEARSCREEN"));

Ceux-ci doivent être utilisés autant que possible. Cependant, ils ne devraient être utilisés que lorsque la tâche peut être effectuée par une autre application sans déstabiliser votre propre application. La chaîne d'action peut être conçue de telle sorte qu'elle soit suffisamment rare pour ne pas être appelée par quelqu'un d'autre, mais comprenez qu'une action demandera à l'utilisateur si plusieurs applications peuvent la gérer. Analogiez l'idée similaire à: "J'utilise Microsoft Office pour les bases de données et le traitement de texte, mais quand je veux une feuille de calcul, j'utilise Open Office". Les deux fournissent des résultats compatibles, mais un est préféré pour une raison ou une autre. Cela fonctionne car Excel n'est pas requis pour que Word ou Access fonctionne correctement. Les équivalents d'Open Office ne sont pas non plus requis pour toute autre partie de travail. Ils sont tous installés ensemble mais travaillent indépendamment parce qu'ils travaillent avec des ressources et des données entièrement différentes.

Hope this helps,

FuzzicalLogic

+0

wow, comment cela n'a pas eu un seul upvote! très bonne réponse! –

0

Il est préférable de ne pas utiliser un nom de classe statique pour appeler une intention . Les cours peuvent varier dans la vie d'une application. Plus tard, si vous décidez que cette activité devrait changer pour une autre classe, il vous suffira de la changer en un seul et même endroit si vous utilisez la méthode AndroidManifest.

De plus, la définition de ce type de configuration permet à d'autres applications d'appeler vos activités pour obtenir un service. Et c'est la puissance réelle d'Android pour laisser les applications communiquer à travers les intentions.

+0

vous vouliez dire deuxième option est préférable d'utiliser? –

2

La première méthode décrite est mieux utilisée dans votre application, l'autre est utilisée pour d'autres applications pour appeler votre activité.

+1

IOW, * seulement * utilise la deuxième approche lorsque vous recherchez expressément d'autres applications (ou le système d'exploitation) pour démarrer votre activité. Cela devient alors une partie de l'API publique de votre application, et vous devrez garder ceci cohérent et supporté pour le reste du temps. Si vous avez une activité qui ne devrait être lancée que par votre propre code, utilisez votre première approche. – CommonsWare

+0

'La première façon décrite est pari utilisé': je suppose que vous voulez dire" MEILLEUR "?, Je ne suis toujours pas clair avec la réponse et encore confus qui est utilisé pour la meilleure pratique ... pouvez-vous éloober votre réponse un petit peu plus? –

Questions connexes