50 votes

L'application démarre toujours à partir de l'activité racine au lieu de reprendre l'état d'arrière-plan (bogue connu).

Je suis confronté exactement au problème mentionné dans ces liens :

http://code.google.com/p/Android/issues/detail?id=2373

http://groups.google.com/group/Android-developers/browse_thread/thread/77aedf6c7daea2ae/da073056831fd8f3?#da073056831fd8f3

http://groups.google.com/group/Android-developers/browse_thread/thread/2d88391190be3303?tvc=2

J'ai une simple activité Root avec les intents LAUNCHER et MAIN et rien d'autre . Je commence une autre activité avec a pas de drapeaux ni rien d'autre dans le manifeste quel qu'il soit.

Je lance l'application (activité racine) et de là, je lance la 2ème activité. En appuyant sur le bouton Home, la tâche passe en arrière-plan. Lorsque je lance à nouveau l'application (à partir du lanceur ou en maintenant le bouton Home enfoncé pour les applications récentes), une nouvelle instance de l'activité racine est lancée au-dessus de la pile existante.

Si j'appuie sur le bouton Retour, la nouvelle activité "racine" se ferme et l'ancienne activité 2 est visible, ce qui signifie qu'elle lance l'activité racine dans la même tâche au lieu de mettre la tâche au premier plan.

Pour contrer cela, j'ai fait du mode de lancement de l'activité Racine singleTask . Maintenant, lorsque j'appuie sur home et que je lance à nouveau l'application, elle efface les activités situées au-dessus de l'ancienne tâche racine et fait apparaître l'ancienne tâche racine au premier plan au lieu de faire apparaître l'ancienne tâche entière avec la deuxième activité en haut. Notez que l'ancienne tâche racine conserve son état d'application, ce qui signifie qu'il ne s'agissait pas d'une nouvelle instance, mais que les activités supérieures avaient été tuées.

Il se produit même sur d'autres applications téléchargées sur le marché. La méthode d'installation manuelle n'a aucun effet pour moi, elle se lance toujours de la même façon.

0 votes

Kurian, j'ai rencontré le même problème. Y a-t-il une solution ? Merci d'avance.

1 votes

Continuez à appuyer sur la touche retour et quittez complètement l'application après l'avoir déployée depuis Eclipse. Lancez-la à nouveau depuis le téléphone.

64voto

Sachin Gurnani Points 2025
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { 
        // Activity was brought to front and not created, 
        // Thus finishing this will get us to the last viewed activity 
        finish(); 
        return; 
    } 

    // Regular activity creation code... 
}

6 votes

C'est tellement débile - pas ta solution, mais le problème pour commencer.

0 votes

Est-ce un bug ou est-ce voulu ? - La façon dont Android l'a configuré

5 votes

Ne fonctionnait pas pour moi, donc j'ai changé android:launchMode="singleInstance" a android:launchMode="singleTask" et ça a marché :)

25voto

Lance Nanek Points 3393

Cela est dû au fait que les intentions utilisées pour démarrer l'application sont différentes. Eclipse lance une application en utilisant une intention sans action et sans catégorie. Le lanceur démarre une application en utilisant une intention avec l'action Android.intent.action.MAIN et la catégorie Android.intent.category.LAUNCHER. L'installateur démarre une application avec l'action Android.intent.action.MAIN et aucune catégorie.

La personne qui a soumis le bug aurait probablement dû le formuler comme une demande d'amélioration du plugin Eclipse puisqu'elle souhaite apparemment qu'Eclipse ait la possibilité de se faire passer pour le lanceur et de lancer des applications en utilisant la même intention que le lanceur.

2 votes

Le problème est cependant que cela persiste même en lançant l'application depuis le téléphone directement...

1 votes

Oui, Kurian a raison - ce n'est pas seulement un problème de plugin Eclipse. La même chose se produit sur un appareil lors d'une mise à jour OTA. C'est le problème Android le plus bizarre auquel j'ai été confronté. Je ne peux pas croire que c'est toujours un nouveau problème créé il y a 1 an ! !!

1 votes

Il ne semble pas que cela ait été résolu à ce jour. Hmmm... je me demande ce que les gens d'ici font vraiment ?

6voto

toni Points 1664

Voici la solution :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 & getIntent().getExtras() == null) {
        finish();
        return;
    }

 Your code....
}

EDIT : J'ai eu des problèmes avec les nouvelles intentions et les notifications. La solution précédente ne fonctionne pas avec les notifications et les intents...

2voto

Amal Kronz Points 579

Ajoutez simplement ceci dans la méthode onCreate de votre activité de lancement comme ceci :

      @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    if (!isTaskRoot()) {
        finish();
        return;
    }
    // other function
    }

0voto

CDrosos Points 1455

Solution similaire pour Xamarin.Android :

if (!IsTaskRoot)
            {
                string action = this.Intent.Action;
                if (this.Intent.HasCategory(Intent.CategoryLauncher) && !string.IsNullOrEmpty(this.Intent.Action) && action == Intent.ActionMain)
                {
                    Finish();
                    return;
                }
            }

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