222 votes

L'application redémarre plutôt que de reprendre.

Hopefully someone can help me figure out, if not a solution, at least an explanation for a behaviour.

Le Problème :

Sur certains appareils, en appuyant sur l'icône du lanceur, la tâche en cours est reprise, sur d'autres, cela entraîne le lancement de l'intention de lancement initiale (redémarrage de l'application). Pourquoi cela se produit-il ?

Le Détail :

Lorsque vous appuyez sur l'icône du "Lanceur", l'application démarre normalement - c'est-à-dire, je suppose, qu'une intention est lancée avec le nom de votre première Activity avec l'action android.intent.action.MAIN et la catégorie android.intent.category.LAUNCHER. Cela ne peut cependant pas toujours être le cas :

Sur la majorité des appareils, si vous appuyez sur l'icône du lanceur après que l'application est déjà en cours d'exécution, l'activité en cours d'exécution dans ce processus est reprise (PAS l'activité initiale). Elle reprend de la même manière que si vous l'aviez sélectionnée dans les "Tâches récentes" dans le menu du système d'exploitation. C'est le comportement que je veux sur tous les appareils.

Cependant, sur certains autres appareils, un comportement différent se produit :

  • Sur le Motorola Xoom, lorsque vous appuyez sur l'icône du lanceur, l'application démarrera toujours l'activité de lancement initiale, peu importe ce qui est en cours d'exécution. Je suppose que les icônes de lancement démarrent toujours l'intention "LAUNCHER".

  • Sur le Samsung Tab 2, lorsque vous appuyez sur l'icône du lanceur, si vous venez d'installer l'application, elle lancera toujours l'activité initiale (identique au Xoom) - cependant, après avoir redémarré l'appareil après l'installation, l'icône du lanceur reprendra l'application. Je suppose que ces appareils ajoutent les "applications installées" dans une table de recherche au démarrage de l'appareil, ce qui permet aux icônes du lanceur de reprendre correctement les tâches en cours d'exécution ?

J'ai lu de nombreuses réponses qui semblent similaires à mon problème mais simplement ajouter android:alwaysRetainTaskState="true" ou utiliser launchMode="singleTop" pour l'Activity ne sont pas la réponse.

Éditer :

Après le dernier lancement de cette application, nous constatons que ce comportement a commencé à se produire sur tous les appareils après le premier redémarrage. Ce qui me semble fou mais en examinant le processus de redémarrage, je ne trouve pas ce qui ne va pas.

1voto

Cette solution a fonctionné pour moi:

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent startMain = new Intent(Intent.ACTION_MAIN);
            startMain.addCategory(Intent.CATEGORY_HOME);
            startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(startMain);
            return false;
        }
        else
            return super.onKeyUp(keyCode, event);
    }

crédit: Je dois minimiser l'application Android lors du clic sur le bouton retour

Peut ne pas fonctionner sur tous les appareils, mais crée avec succès le comportement du bouton Accueil lorsque le bouton retour est pressé, arrêtant ainsi l'activité plutôt que de la terminer.

0voto

guy Points 972

Dans le dossier Android android/app/src/main/AndroidManifest.xml, supprimez la ligne

android:noHistory="true"

-1voto

Christer Points 428

J'ai eu le même problème, la cause était :

(Code Kotlin, dans MainActivity)

override fun onBackPressed() {
    finish()
}

Donc lors de la navigation vers mon MainActivity depuis mon LoginActivity j'utilise ceci :

    val intent = Intent(this, MainActivity::class.java)
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    startActivity(intent)

Lors de l'utilisation de ces drapeaux, je n'ai pas besoin d'avoir un onBackPressed() dans mon MainActivity, il quittera l'application naturellement en appuyant sur retour. Et en appuyant sur le bouton Accueil puis en revenant dans l'application, elle ne redémarre pas.

-1voto

ToonSuperLove Points 939

Mon point de vue, cela dépend de nombreux facteurs

Je vais pointer quelques principaux facteurs ici,

Facteur Mémoire

Si votre mobile a assez de mémoire, après avoir géré/traité la nouvelle application, lorsque vous remettez votre ancienne application, elle reprendra de l'état de RÉSUMÉ

Si votre mobile n'a pas assez de mémoire, après avoir géré/traité la nouvelle application, lorsque vous remettez votre ancienne application, elle reprendra de l'état INITIAL

Facteur ROM Personnalisé

Vous savez, presque toutes les ROM de chaque marque (par exemple Samsung, LG, Sony, HTC, etc) ont leur propre ROM personnalisée. Donc, cela dépend également de chaque marque ce qu'ils veulent faire..

Non seulement l'application, mais aussi certaines fonctions, certaines méthodes, ont également été ajoutées/supprimées en fonction de chaque marque

Si vous voulez vérifier quelle est réellement l'étape, vous devrez vous baser sur Nexus

Basé sur le Développeur de l'Application

Le développeur de l'application peut rendre son application aussi importante, sans historique, en haut clair, ou autre

Donc, si vous voulez comparer, vous devez également vous baser sur la même application

Références [Recherchez le FLAG]

http://developer.android.com/reference/android/content/Intent.html

-3voto

Arun Antony Points 3

Solution pour les personnes qui n'ont aucune idée de la programmation et qui rencontrent ce problème sur leur téléphone Android. Cela arrive principalement à cause de la mise à jour de la version d'Android (c'est seulement mon hypothèse). Après la mise à jour, toutes vos applications sont optimisées pour utiliser moins de batterie. Mais, cela ralentit votre appareil.

Comment résoudre

Allez dans Paramètres >> Applications >> paramètres des applications (cherchez le signe des paramètres n'importe où à l'écran - il est différent sur différents appareils) >> optimisation de la batterie (ou une option similaire) >> déplacer toutes les applications vers l'état 'non optimisé' (il faut le faire une par une manuellement - peut-être autoriser/refuser dans certains téléphones). Votre application de lancement doit être 'non optimisée' (Zen UI launcher dans mon cas - c'est le coupable je pense - vous pouvez essayer d'optimiser/Ne pas optimiser et redémarrer une autre application si vous avez le temps). Maintenant redémarrez votre téléphone. (pas besoin de réinitialiser les données / mode sans échec ou aucun problème)

Essayez le multitâche maintenant. :) Appuyer sur l'icône de lancement devrait maintenant résulter dans la reprise de la tâche actuelle. :) Votre appareil va devenir N'inquiétez pas pour la batterie, elle se déchargera de toute façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X