web-dev-qa-db-fra.com

Quelle méthode d'activité est appelée lorsque des changements d'orientation se produisent?

Quelle méthode du cycle de vie est appelée lorsque des changements d'orientation se produisent? Mon application exécute la méthode onResume() ou peut recharger toute l'activité car j'ai défini un booléen pour vérifier s'il est exécuté en premier ou non. J'ai lu onConfigurationChanged() commence quand un changement d'orientation se produit, est-ce vrai? Comment gérer ça?

31
Nikola Despotoski

Intéressant ...

L'activité est start onResume() est celle que vous déclarez dans votre XML par défaut.

Et comme je l'ai trouvé à partir de la réponse à la question sur le débordement de pile est:

Changement d'orientation

  • onSaveInstanceState
  • onPause
  • onStop
  • onCreate
  • onStart
  • onRestoreInstanceState
  • pour résumer

Passer à l'activité 2

  • onSaveInstanceState
  • onPause

Changement d'orientation PENDANT L'ACTIVITÉ 2

  • onStop
  • onCreate
  • onStart

Retour en arrière de l'activité 2

  • pour résumer

Je suppose que parce que l'activité 1 est masquée au moment de la rotation, onRestoreInstanceState n'est pas appelée car il n'y a pas de `` vue '' (c'est-à-dire qu'elle ne peut pas être vue/vue). En outre, il est tout à fait possible d'avoir 2 fichiers de mise en page complètement différents pour le portrait/paysage qui peuvent potentiellement avoir différents éléments d'interface utilisateur avec différents ID.

Par conséquent, je dirais que si vous souhaitez utiliser le bundle dans onSaveInstanceState pour enregistrer vos propres données, vous devez ajouter une logique supplémentaire dans votre onCreate (dans l'activité 1) pour traiter vos propres données là-bas (ainsi que le faire conditionnellement dans onRestoreInstanceState).

En particulier, vous pouvez conserver un "dernier champ d'orientation connu" afin que onCreate sache qu'il doit traiter vos propres données car l'orientation a changé, plutôt que de compter sur l'appel de onRestoreInstanceState.

38
Siten
public class MainActivity extends AppCompatActivity {
private final static String TAG = "AppActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate(Bundle) called");
    setContentView(R.layout.activity_main);
}

@Override
public void onStart() {
    super.onStart();
    Log.d(TAG, "onStart() called");
}

@Override
public void onPause() {
    super.onPause();
    Log.d(TAG, "onPause() called");
}

@Override
public void onResume() {
    super.onResume();
    Log.d(TAG, "onResume() called");
}

@Override
public void onStop() {
    super.onStop();
    Log.d(TAG, "onStop() called");
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy() called");
}

}

1) Essayez d'exécuter votre application sur votre téléphone et/ou émulateur et ouvrez Logcat => en haut de la fenêtre, sélectionnez Verbose.

2) Essayez maintenant de changer l'orientation de l'écran (par ex. En mode portrait => mode paysage).

J'espère que cette alternative vous donnera plus d'informations sur le cycle de vie de l'activité.

1
alexandru catanet