Comment arrêter un programme en cours d'exécution sous Eclipse?

107

Je ne trouve pas d'option pour arrêter un programme en cours d'exécution (que ce soit en mode débogage ou en mode version).

Donc pour l'instant, j'arrête le programme (en retournant le contrôle à Eclipse) simplement en fermant l'émulateur.

Existe-t-il une meilleure façon de le faire? Telle que je n'ai pas besoin de fermer (et redémarrer) l'émulateur?

Android Eve
la source

Réponses:

112

Je comprends que vous souhaitez arrêter votre application sur l'émulateur. Pour cela, vous pouvez ouvrir la fenêtre des périphériques (dans la perspective de débogage), sélectionner le processus puis appuyer sur le bouton d'arrêt de la même fenêtre.

Varun
la source
1
Merci beaucoup. Tu m'as sauvé la vie. J'accepterai votre réponse dans 7 minutes ... :)
Android Eve
1
Ajout d'une autre façon que je viens de découvrir: dans l'émulateur, sélectionnez Paramètres> Applications> Gérer les applications> (sélectionnez l'application)> Forcer l'arrêt.
Android Eve
Ya. c'est une autre façon, mais il faut du temps pour y parvenir, à moins que vous ayez cela en arrière-plan. :)
Varun
11
un bouton Arrêter comme dans Visual Studio serait tellement agréable. Pouah.
Ian Davis
Je viens de démarrer l'application juste après la création du projet et en cliquant sur le bouton d'arrêt, cela n'a pas tué le processus mais a déclenché un RemoteException sending setActive(false) notificationdans la fenêtre logCat
Stéphane
77

Ceux qui trouvent fastidieux de basculer entre les perspectives pour arrêter le programme (comme je l'ai fait), vous pouvez afficher les fenêtres des appareils dans votre perspective actuelle en sélectionnant

Windows > Afficher la vue > Autre ... > Android > Appareils

GeekityGeek
la source
3
Merci, c'est exactement ce que je cherchais! +1
Sabobin
+1. Génial!, Et si je veux qu'il l'exécute à nouveau, je le redémarre simplement à partir de l'appareil, et cela fonctionne parfaitement.
Francisco Corrales Morales
Encore une étape, trouvez votre packageID dans la liste. Au début, j'ai été décontenancé par ça, mais ensuite je me suis dit "Oh cool! Je peux tout voir." C'est bien de voir ce qu'Android a sous son capot (note: j'utilise le simulateur Genymotion, peut-être que l'émulateur est ce que vous dites, je ne peux tout simplement pas attendre qu'il fonctionne)
Stephen J
Cela viole le cycle de vie de l'application Android et peut entraîner des sorties sans grâce entraînant l'impossibilité de redémarrer l'application et de forcer le redémarrage de l'appareil pour résoudre le problème.
Dominic Cerisano
13

Gardez à l'esprit que sur Android, les programmes ne «s'arrêtent» généralement que si vous terminez () ou le système les détruit lorsque de la mémoire est nécessaire. Pourquoi s'arrêter du tout? Vous n'avez pas besoin de vous arrêter pour réparer / réinstaller / re-tester, par exemple.

DJC
la source
C'est un excellent aperçu. Je vous remercie. +1
Android Eve
1
@Eve .. mon plaisir. Pour des détails sanglants, consultez stackoverflow.com/questions/2033914/…
DJC
4
Eh bien, peut-être. Mais cela ne répond pas vraiment à la question. Dans mon cas, je joue avec la classe AudioTrack et génère un flux de sons. Cela devient vraiment ennuyeux d'écouter cette onde sinusoïdale tout le temps. Je dois aller dans DDMS, rechercher le bon fil, le sélectionner, puis trouver l'icône STOP. Très boiteux.
Vagrant
2
Comment pouvez-vous réinitialiser l'état de votre programme sans vous arrêter?
Erik Engheim
J'ai remarqué qu'avec l'émulateur, il ne réexécutera pas votre programme avant quelques minutes environ (probablement parce qu'il est toujours en cours d'exécution). Il est pratique de terminer plus tôt, lorsque vous avez besoin de faire une petite modification, puis de la vérifier rapidement dans l'émulateur. Et souvent, vous apportez plusieurs petites modifications, donc pouvoir arrêter l'application en cours d'exécution et la recharger pour vérifier rapidement vous fait gagner beaucoup de temps.
Azurespot
12

Dans la perspective "Déboguer", sélectionnez la racine de l'application sous "Déboguer" (où se trouve la liste des threads actifs) et cliquez sur le bouton d'arrêt.

Chris Thompson
la source
merci aussi. Je n'ai compris vos instructions qu'après avoir lu @ varun. +1
Android Eve
@Android Eve, ah, et bien je suis content que cela ait aidé. Désolé, ce n'était pas assez clair!
Chris Thompson
C'est bon. Je suis totalement désorienté en ce qui concerne le développement Android, malgré (et peut-être à cause de) de nombreuses années de développement sur de nombreuses autres plateformes.
Android Eve
Oui, c'est de loin la solution la plus simple. (En fait, prob devrait être la réponse acceptée). Le bouton Arrêter n'est désactivé que lorsqu'un fil est mis en surbrillance au lieu de l'entrée supérieure [Application Android].
Colin
7

Travailler pour moi.

Windows -> Ouvrir la perspective -> Autre ... -> DDMS

  1. Dans la vue Android, sur la fenêtre de gauche, vous pouvez voir "Appareils". Il devrait y avoir une liste des applications en cours d'exécution (émulateur ou périphériques physiques). Cliquez sur l'application que vous souhaitez fermer. Normalement, le nom est le nom du package + le nom de l'application
  2. Cliquez maintenant sur le symbole "Stop".

Pour revenir à la vue normale, il vous suffit d'appuyer sur le bouton Java en haut à droite. Vous pouvez également le faire en appuyant sur: Windows -> Ouvrir la perspective -> Autre ... -> Java

Zain Ali
la source
2

cette réponse ne traite pas d'Eclipse, mais puisque cette question se pose dans une recherche Google pour arrêter un programme Android en cours d'exécution, j'aimerais proposer une méthode de ligne de commande. run adb shell, trouvez le PID du processus avec lequel vous voulez tuer ps, par exemple le mien était:

u0_a46 2097 37 175520 19912 ffffffff 40037ebc S net.unternet.bleah.blarg

alors juste kill 2097et vous devriez voir l'écran principal apparaître à nouveau.

jcomeau_ictx
la source
Violation du cycle de vie de l'application. Peut causer des problèmes avec les ressources système qui ne sont pas libérées et forcer le redémarrage de l'appareil à effacer.
Dominic Cerisano
0

Ajoutez un point d'arrêt à votre code à l'endroit où vous souhaitez vous arrêter, puis exécutez-le en mode débogage en appuyant sur F11.

Salman Khalid
la source
0

Zombies Android Figure 1 - De nombreux zombies ont été tués lors de la recherche de cette réponse

Il n'est pas recommandé de tuer un processus de machine virtuelle Java d'une application Android au niveau du système d'exploitation. Malheureusement, c'est exactement ce que fait la fenêtre de périphérique eclipse "stop", tout comme System.exit () et la commande shell "kill".

Cela subvertit les méthodes normales du cycle de vie des applications telles que onStop (), onDestroy () et finalize ().

De nombreuses applications nécessitent ces méthodes pour une sortie gracieuse (par exemple, si elles utilisent des objets système tels que Sensor, MediaPlayer, Equalizer, Visualizer, etc.).

Ces objets système traînent avec des poignées de mort zombie sur les ressources système si release () n'est pas appelé explicitement pendant ces méthodes de cycle de vie. Voir fig. 1 ci-dessus. Cela peut empêcher une application de redémarrer et même nécessiter un redémarrage. C'est l'aspect ingrat.

La seule solution est de vous assurer de toujours quitter proprement votre application avec un appel à onStop () ou onDestroy () ou au moins finalize (). Le débogueur fait cela, tout comme le système d'exploitation à l'arrêt.

Vous pouvez configurer votre application pour intercepter les événements SIG_HUP afin de forcer une sortie gracieuse de la ligne de commande.

Le seul moment où vous tueriez la VM de l'application est dans l'état ANR (déjà un zombie). Les ANR doivent être corrigés. Ne déployez jamais une application pouvant entrer dans cet état. C'est extrêmement impoli.

Vous pouvez utiliser Google Analytics et le Play Store pour les surveiller lors du déploiement. Vous ne voulez pas que les utilisateurs en colère donnent des critiques ANR à une seule étoile après avoir redémarré à cause de votre application zombie. Très mauvais.

N'oubliez pas qu'Android est Linux: traitez-le comme un vrai système d'exploitation et respectez le cycle de vie de l'application, sinon vous devrez sûrement faire face à la redoutable Apocalypse Zombie.

PS: Si vous n'aimez pas l'analogie des zombies, qu'en est-il de Fantasia?

entrez la description de l'image ici

Dominic Cerisano
la source
0

Voir l'image: 1. Cliquez sur DDMS; 2. Sélectionnez l'application actuelle; 3. Cliquez sur "Arrêter" entrez la description de l'image ici

Eugène Bosikov
la source
Je fais cela et l'application arrête le débogage. mais il y a un cas: 1- déconnectez l'appareil de l'usb, exécutez l'application, puis lorsque l'application est en erreur, elle se ferme et après cela, à chaque exécution, affichez le formulaire de débogage et attendez que le câble USB se connecte ou appuyez sur le bouton arrière. 2- L'appareil se connecte à l'usb et l'application s'exécute (Ctrl + F11), puis automatiquement l'application s'exécute en mode débogage. Pour résoudre ce problème, j'ai créé un nouveau projet et un par un copié / collé des fichiers dans un nouveau projet, mais la même chose se reproduit. Maintenant une aide?
Ahmad Ebrahimi