OnRestart vs OnResume – Question sur le cycle de vie d'Android

Mon objectif final est d'avoir une application qui exécute un bloc de code quand il (l'application, et non l'activité) est ouverte après avoir été laissé (retour de l'écran d'accueil, etc.)

Selon le cycle de vie de l'activité, ce devrait être l' onRestart() sur une base par activité (au moins, comment je l'interprète)

  • Les défis de RecyclerView d'Android L
  • Existe-t-il un appareil Android avec une taille d'écran supérieure à GL_MAX_TEXTURE_SIZE?
  • Phonegap Build CLI-5.2.0 Télécharger et fermer à partir d'une application Web
  • Signification de android.content.UriMatcher
  • Fonctionnalité Firebase Android Find Friends
  • Comment ignorer un élément JSON dans Android Retrofit
  • Les deux onRestart() et onResume() sont appelés si je retourne à l'activité dans l'application (bouton arrière) ET lorsque l'application est appelée sauvegarde.

    Compte tenu de ce diagramme Entrez la description de l'image ici

    Je l'interprète de cette façon:

    • RED = mouvement entre les activités de l'application
    • BLEU = passer à une activité en dehors de la demande

    Est-ce que ma compréhension est incorrecte?

    EDIT (cas d'utilisation spécifique pour clarifier)

    Je tente d'utiliser onRestart () pour répliquer une logique de sécurité (validation PIN) trouvée dans onCreate (), mais on l'appelle même lorsque j'appuie sur le bouton arrière dans l'application …

    5 Solutions collect form web for “OnRestart vs OnResume – Question sur le cycle de vie d'Android”

    Ce serait parce que, sauf si vous utilisez Fragments, chaque «écran» dans votre application est une nouvelle activité, lorsque vous cliquez sur le bouton Précédent, il redémarre l'activité de la page avant.

    Si je comprends ce que vous voulez faire correctement, vous souhaitez mettre votre code surCréer, et non surRetard.

    VOIR PANNE DE COMMENTAIRE POUR RÉPONSE

    Mon observation est qu'il est difficile de lier les événements du cycle de vie au comportement des utilisateurs sur le périphérique ou l'émulateur. Lorsque votre application est en pause, si l'appareil a besoin de mémoire ou veut récupérer des ressources, elle met fin à l'activité, ce qui entraînera l'inscription de CallCreate. Il y a trop de scénarios pour construire une machine d'état adéquate pour vous dire "comment" ou "pourquoi" votre activité a été terminée.

    La seule façon dont j'ai trouvé de gérer ceci est de créer un service pour conserver l'état de l'application et gérer manuellement l'état. Le problème consiste à utiliser l'état Activité pour gérer l'état de l'application. La conception de l'activité semble avoir des limites qui font simplement un mauvais choix pour atteindre l'objectif que vous avez déclaré.

    Voici comment faire ceci: –

    1. Avoir une activité de base dont toutes vos activités sont dérivées.

    2. Ajouter à l'activité de base: –

       int nAppState; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); nAppState = 0; . . } protected override void OnStop() { AppState(); base.OnStop(); } public static int IMPORTANCE_BACKGROUND = 400; protected override void AppState() { ActivityManager am = (ActivityManager)GetSystemService(Context.ActivityService); IList<ActivityManager.RunningAppProcessInfo> list2 = am.RunningAppProcesses; foreach (ActivityManager.RunningAppProcessInfo ti in list2) { if (ti.ProcessName.ToLower() == "com.mycompany.myapp") { nAppState = ti.Importance; break; } } } protected override void OnRestart() { base.OnRestart(); if (nAppState == IMPORTANCE_BACKGROUND) { // Show a log in screen RunOnUiThread(delegate { StartActivity(new Intent(this, typeof(LoginAppearActivity))); }); nAppState = 0; } } 
    3. Notez qu'il s'agit de Mono C #, ce sera le même code pour Java, je vous laisse le faire pour le convertir!

    Oui, vos affirmations pour le rouge et le bleu sont correctes.

    Toutefois, notez la voie alternative à partir d'OnPause () et onStop (). Le processus qui a été tué pour des raisons de mémoire est a) hors de votre contrôle et b) imperceptible pour vous si vous utilisez uniquement onRestart () pour détecter "revenir" à l'activité.

    Vous avez une option pour éviter l'activité précédente en évitant / enlever l'activité à venir dans Stack en définissant un drapeau avant d'appeler startActivity (intention):

     intent.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); 

    Cela évitera l'activité actuelle de faire appel à la presse arrière. Alternativement, vous pouvez également utiliser la méthode onBackPressed () de l'activité en cours.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.