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.

65voto

sky Points 664

J'ai eu le même problème avec une application et j'ai résolu ce comportement en ajoutant un drapeau "android:launchMode="singleTop"" au lieu de "android:launchMode="singleTask"" dans le <activity> de votre fichier AndroidManifest.xml. J'espère que cela aidera quelqu'un.

34voto

Jayant Arora Points 769

Jusqu'à présent, j'ai découvert que c'est un problème basé sur la façon dont vous l'installez dans votre appareil réel, spécifiquement :

  1. Si vous copiez et collez simplement l'APK dans le stockage local de votre appareil et que vous l'installez à partir de l'appareil, qu'il soit signé ou non, ou qu'il provienne du dossier bin, il présente ce comportement, l'application redémarre à partir de l'icône du menu.

Si vous l'installez en utilisant l'une des options suivantes, ce problème n'apparaît pas :

  1. Allez dans sdk/tools/ en utilisant un terminal ou une invite de commande puis tapez

    adb install <FILE PATH OF .APK FILE>

    Sous Linux, tapez :

    ./adb install <FILE PATH OF .APK FILE>
  2. Il suffit de lancer votre projet depuis Eclipse.

Je serais heureux de savoir s'il y a un moyen possible de distribuer des APKs corrects pour les tests bêta. J'ai déjà essayé d'exporter un APK signé parce que lorsque vous copiez et collez un APK et l'installez manuellement, il montre le comportement de rogue.

Mise à jour :

J'ai trouvé une solution. Suivez ces deux étapes :

  1. Définir android:launchMode="singleTask" = true pour toutes les activités de votre application dans le AndroidMainifest.xml à l'intérieur de la activité étiquette.
  2. Placez ce code dans l'activité de votre lanceur. onCreate() .

    if (!isTaskRoot())
    {
        final Intent intent = getIntent();
        final String intentAction = intent.getAction(); 
        if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
            finish();
            return;       
        }
    }

Ce comportement est un bogue dans Android. Ce n'est pas un cas particulier.

12voto

Fathima km Points 733
 // To prevent launching another instance of app on clicking app icon 
        if (!isTaskRoot()
                && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
                && getIntent().getAction() != null
                && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

            finish();
            return;
        }

écrivez le code ci-dessus dans votre activité de lancement avant d'appeler setContentView. Cela résoudra le problème

8voto

vasanth Points 695

Vous pourriez utiliser launchMode comme singleTop à l'activité du lanceur dans AndroidManifest.xml

       <activity
        android:name="<YOUR_ACTIVITY>"
        android:label="@string/app_name"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

4voto

yak32 Points 49

C'est le comportement par défaut dans Android. Pour les builds de débogage, cela fonctionne différemment pour une raison quelconque. Cela peut être résolu en ajoutant android:launchMode="singleInstance" à l'activité, que vous voulez relancer après le lancement à partir de l'icône.

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