91 votes

L'application redémarre complètement lorsqu'elle est lancée par une pression sur l'icône dans le lanceur.

Je suis en train d'essayer de créer une version de ma première application Android pour l'envoyer à quelques testeurs. Cependant, j'ai rencontré un problème. Lorsque vous quittez l'application et que vous y revenez en la lançant via son icône, elle redémarre toute l'application au lieu de retourner à son emplacement précédent. Cela se produit même si vous ré-entrez juste après avoir quitté l'application. En revanche, cela ne se produit pas si je maintiens le bouton Home enfoncé et que je lance l'application via la liste des applications récentes.

J'ai cherché en ligne d'autres personnes ayant ce problème et il y en a quelques-unes, mais personne n'a jamais eu de réponse solide quant à la raison pour laquelle cela leur arrive. Il a été suggéré dans d'anciennes questions de définir le mode de lancement à singletask ou singleinstance dans le fichier manifeste, mais cela ne m'a pas aidé, et d'ailleurs - de ce que je comprends, le comportement par défaut d'Android est de revenir à l'état précédent de la tâche dans cette situation, donc je ne sais pas pourquoi j'aurais besoin d'options spéciales du manifeste pour le faire faire.

Le plus bizarre dans ce problème est que si j'utilise eclipse et le débogueur pour mettre l'application sur mon téléphone, ce problème ne se produit pas. Je n'ai même pas besoin d'être connecté au debugger, il semble que tant que j'ai une version debug de l'application, le problème ne se produit pas. Mais si j'utilise une version release (je la crée en utilisant l'option de menu Android Tools - Export Signed Application Package dans Eclipse), le problème se produit. Si quelqu'un a une idée de la cause de ce problème, je serais ravi d'entendre votre avis.

4voto

Lord Bolling Points 41

Ajoutez ceci à votre première activité :

if (!isTaskRoot()) {
        finish();
        return;
}     
super.onCreate(savedInstanceState);

3voto

Moven Points 21

Vous pouvez essayer de régler android:alwaysRetainTaskState="true" pour votre activité de lanceur dans AndroidManifest.xml.

    <activity
        android:name=".YourMainActivity"
        android:alwaysRetainTaskState="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Pour plus de détails, vous pouvez consulter https://developer.Android.com/guide/topics/manifest/activity-element.html#always

3voto

Skaterhaz Points 301

Pour moi, j'ai découvert que j'avais posté par erreur NoHistory = true dans mon attribut d'activité

[Activity(NoHistory = true, ScreenOrientation = ScreenOrientation.Landscape)]

Cela a empêché la reprise de l'application dans cette activité et a redémarré

2voto

jsnid00 Points 56

Essayez d'utiliser android:alwaysRetainTaskState comme le montre l'exemple suivant :

<activity
    android:name="com.jsnider.timelineplanner.MainActivity"
    android:alwaysRetainTaskState="true"
    android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

2voto

Amit Points 1161

Je vois ce problème sur Android TV en 2019. Y a-t-il un meilleur correctif pour cela ? autre que

if (!isTaskRoot()) {
    finish();
}

Cela fonctionne mais ressemble plus à un hack qu'à une solution réelle.

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