web-dev-qa-db-fra.com

Comment faire la distinction entre le changement d'orientation et la sortie de l'application android

Je comprends que lorsque l'orientation de l'écran change, les activités en cours onDestroy () sont appelées, suivies de onCreate () pour recréer efficacement l'activité. J'ai besoin de savoir par programmation si l'application est en cours de sortie ou si juste l'orientation est modifiée.

Une méthode consiste pour l'activité précédente à m'avertir lorsque sa méthode onResume () est appelée, cela me fera savoir que l'utilisateur a appuyé sur le bouton de retour et que l'orientation n'a pas été modifiée.

P.S. Je recherche une solution plus élégante que d'écouter un clic matériel sur le bouton.

Voici ce que je voulais faire:

J'ai deux onglets, lorsque l'activité est entrée pour la première fois ou que l'utilisateur a quitté l'activité et l'entre maintenant, un certain onglet s'affiche en fonction d'un critère.

Lorsque l'orientation change, je dois rester sur le même onglet.

Utilisez la méthode isFinishing() de l'activité.

@Override
  protected void onDestroy() {
    super.onDestroy();
    if (isFinishing()) {
      // do stuff
    } else { 
      //It's an orientation change.
    }
  }
93
dmon

vous pouvez utiliser isChangingConfigurations() Lire depuis documentation

Vérifiez si cette activité est en cours de destruction afin d'être recréée avec une nouvelle configuration. Ceci est souvent utilisé dans onStop () pour déterminer si l'état doit être nettoyé ou s'il sera transmis à l'instance suivante de l'activité via onRetainNonConfigurationInstance ().

Renvoie Si l'activité est supprimée afin d'être recréée avec une nouvelle configuration, renvoie true; sinon renvoie faux

Expliquez de manière simple avec un exemple

isChangingConfigurations()

est la méthode utilisée pour vérifier si l'activité sera détruite pour être recréée à nouveau (à la suite d'un changement d'orientation)

Comment l'utiliser ?

si vous utilisez api> = 11 alors pas de problème, mais si vous utilisez api <11 alors nous devons gérer ce manuel de méthode Je fais une variable booléenne appelée IsconfigChange

private boolean IsconfigChange ;
...

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IsconfigChange = true ;

}


    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    @Override
    public boolean isChangingConfigurations() {
        if(Android.os.Build.VERSION.SDK_INT >= 11){
            Log.i("DEBUG", "Orientation changed api >= 11 ");
            return super.isChangingConfigurations();    
        }else {
            Log.i("DEBUG", "Orientation changed api < 11 ");
            return IsconfigChange; 
        }
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    @Override
    protected void onStop() {
        super.onStop();
        if(isChangingConfigurations()){
            Log.i("DEBUG", "isChangingConfirgurations OnStop Called");
        }  else{
            Log.i("DEBUG", "OnStop Called");
        }
    }

Estival

vous pouvez utiliser isChangingConfigurations dans onStop pour vérifier si l'application s'arrête d'être détruite ou en raison d'un changement d'orientation.

ou vous pouvez utiliser isFinishing vérifier ma réponse ici

20
Mina Fawzy

pour l'API lvl> = 11 L'activité a une méthode isChangingConfigurations()

3
Maurycy

Vous pouvez récupérer la valeur de la méthode Activity.getChangingConfigurations () dans votre rappel onDestroy. Cela renverra un résultat tel que ORIENTATION_PORTRAIT , que vous pourrez comparer à votre orientation actuelle .

Notez que la fermeture de l'activité et les changements d'orientation ne sont pas les seules conditions à considérer ici: qu'en est-il du retour à l'écran d'accueil, des appels téléphoniques entrants et d'autres applications voler le focus, et tous les autres scénarios lorsque votre activité n'est plus à l'avant de la pile?

La plupart du temps, vous n'aurez pas besoin de le faire. Si vous essayez de résoudre un problème d'état d'activité (se manifestant souvent sous la forme d'un NullPointerException lorsque vous faites pivoter l'écran) en capturant l'événement d'orientation; examinez le cycle de vie de l'activité Android Android et assurez-vous que vous n'essayez pas seulement de pirater un correctif pour un défaut de conception. Postez votre problème d'origine sur ce site si vous n'êtes pas sûr.

1
seanhodges