it-swarm-eu.dev

Pourquoi super.onDestroy () dans Java Android va en haut dans les destructeurs?)

Selon quelle logique super.onDestroy(); dans les destructeurs va-t-il en haut? Par exemple:

protected void onDestroy() {        
    super.onDestroy();
    releaseMediaPlayer();
}

et pas:

protected void onDestroy() {        
    releaseMediaPlayer();
    super.onDestroy();
}

Comme en c ++, obj-c, Pascal, etc?

48
Vassilis

Cela dépend vraiment de ce que vous voulez faire dans votre onDestroy. C'est ce que fait super.onDestroy (dans cet ordre):

  • Ignorez toutes les boîtes de dialogue gérées par l'activité.
  • Fermez tous les curseurs gérés par l'activité.
  • Fermez toute boîte de dialogue de recherche ouverte

Si la logique que vous mettez dans onDestroy a quelque chose à voir avec ces trois choses que Android fait, alors vous devrez peut-être vous soucier de la commande. Sinon, et dans la plupart des cas, cela n'a pas d'importance.

59
Cristian

Dans le ThreadSample.Zip sur la formation Reporting Work Status , il y a un commentaire dans onDestroy ()

public void onDestroy() {
    ...
    // Must always call the super method at the end.
    super.onDestroy();
}

Donc, peut-être que lorsque vous utilisez des récepteurs de diffusion, le super doit aller à la fin.

11
Zorfling

Étant donné que nous étendons à partir des classes de base Android, il est toujours judicieux de laisser la classe parente se créer et s'initialiser en premier pendant la création et laisser l'enfant non initialiser et libérer la ressource en premier pendant l'arrêt/arrêter les composants. Cette approche est recommandée, mais elle dépend entièrement des cas d'utilisation et des scénarios.

public void onCreate(Bundle bundle){
   super.onCreate(bundle);
   //perform child class initializations.
}

public void onDestroy(){
   //perform uninitialization and free resource
    super.onDestroy();
}
8
siva

Quelle est votre question? Vous pouvez le faire de toute façon, cela dépend si vous voulez que la onDestroy() de votre superclasse soit appelée avant la vôtre. Habituellement, je ne pense pas que cela soit important dans Android.

De plus, onDestroy() n'est pas un destructeur. Cela ne détruit pas réellement l'objet. C'est juste une méthode qui s'appelle basée sur un certain état. Ainsi, votre instance est toujours en vie et très bien * après l'exécution et le retour de la fonction onDestroy() de la superclasse.

* Très probablement, Android est libre de tuer l'activité à tout moment, mais vous pouvez supposer qu'elle est toujours là.

5
Falmarri