214 votes

Comment simuler Android en tuant mon processus

Android va tuer un processus si c'est dans l'arrière-plan et le système d'exploitation décide qu'il a besoin de ressources (RAM, CPU, etc.). J'ai besoin d'être capable de simuler ce comportement au cours des essais afin de m'assurer que ma demande est de se comporter correctement. Je veux être capable de faire cela de façon automatisée afin que je puisse tester si l'application se comporte correctement lorsque cela se produit, ce qui signifie que je vais devoir tester cette dans chaque activité, etc.

Je sais comment tuer mon processus. Ce n'est pas le problème. Le problème est que quand je tue mon processus (à l'aide de DDMS, adb shell kill, Process.killProcess(), etc.) Android ne redémarre pas de la même manière que si le système d'exploitation Android l'avait tué lui-même.

Si le système d'exploitation Android tue le processus (en raison de conditions de ressources), lorsque l'utilisateur revient à l'application Android va recréer le processus, puis de les recréer le haut de l'activité sur l'activité de la pile (en appelant onCreate()).

D'autre part, si je kill le processus, Android suppose que l'activité sur le haut de la pile a été mal comportés, il recrée automatiquement le processus, puis enlève le haut de l'activité de l'activité de la pile et recrée l'activité qui était en-dessous du haut de l'activité (en appelant onCreate()`). Ce n'est pas le comportement que je veux. Je veux le même comportement que quand Android tue le processus.

Juste pour expliquer de façon visuelle, si mon activité pile ressemble à ceci:

    ActivityA -> ActivityB -> ActivityC -> ActivityD

Si Android tue le processus et l'utilisateur retourne à l'application, Android recrée le processus et crée ActivityD.

Si je tue le processus, Android recrée le processus et crée ActivityC.

163voto

Mark Points 1141

Le meilleur moyen de tester cela pour moi a été de faire ceci:

  • Ouvrir ActivityD dans votre application
  • Appuyez sur la touche Home
  • Appuyez sur le bouton Stop dans DDMS sur votre application (cela va tuer l'application de processus)
  • Revenir à l'application avec la Maison longue de presse ou ouvert apps (dépend de l'appareil)
  • L'Application va commencer dans recréé ActivityD (ActivityA, ActivityB, ActivityC sont morts et sera recréé lorsque vous obtenez de nouveau à eux)

Sur certains appareils, vous pouvez également revenir à l'application (ActivityD) avec des Applications -> Votre icône de lancement, mais sur d'autres appareils, il va commencer la ActivityA à la place.

C'est ce que Android docs disent à ce sujet:

Normalement, le système efface une tâche (supprime toutes les activités de la pile au-dessus de la racine de l'activité) dans certaines situations, lorsque l'utilisateur re-sélectionne que des tâches de l'écran d'accueil. Généralement, cela se fait si l'utilisateur n'a pas visité la tâche pour un certain laps de temps, comme 30 minutes.

3voto

Igor Kostomin Points 11

Vous pouvez effectuer les étapes suivantes pour reproduire le comportement recherché:

  1. Ouvrez votre application, accédez à l'activité principale
  2. Utilisez le panneau de notification pour accéder à n’importe quelle autre application plein écran (par exemple, les paramètres système - dans le coin supérieur droit).
  3. Tuez votre processus de demande
  4. Appuyez sur le bouton de retour

2voto

Coffee123 Points 58

À tous, Je voulais juste vous laisser savoir à propos de ce document que j'ai trouvé:

http://developer.android.com/tools/testing/activity_testing.html

Je ne peux pas dire avec 100% de certitude qu'il existe une méthode kill ici exactement le même que Android, mais, c'est le début. Vous pouvez simuler de nombreuses parties de l'activité du cycle de vie ici, donc vous devriez être en mesure de simuler le meurtre d'un processus.

Aussi, voici un tutoriel: http://developer.android.com/tools/testing/activity_test.html#StateManagementTests

Espérons que cette aide. Cheers

1voto

billynomates Points 678

Dans les options du développeur, sous Paramètres, sélectionnez "Ne pas conserver les activités", ce qui les détruira dès que vous les quitterez.

-1voto

vArDo Points 3428

Il semble que vous voulez tester onSaveInstanceState et onRestoreInstanceState.

Essai sur le périphérique réel: jetez un oeil à SetAlwaysFinish app.

Les essais dans l'émulateur: la caisse de détruire Immédiatement les activités de l'option dans Outils de Dev d'Application dans l'émulateur Android.

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