Wie stoppe ich ein Programm, das unter Eclipse ausgeführt wird?

107

Ich kann keine Option zum Stoppen eines laufenden Programms finden (ob im Debug- oder Release-Modus).

Im Moment stoppe ich das Programm (Rückgabe der Steuerung an Eclipse), indem ich einfach den Emulator schließe.

Gibt es einen besseren Weg, dies zu tun? So, dass ich den Emulator nicht schließen (und neu starten) muss?

Android Eve
quelle

Antworten:

112

Ich verstehe, dass Sie Ihre App auf dem Emulator stoppen möchten. Dazu können Sie das Gerätefenster (in der Debug-Perspektive) öffnen, den Prozess auswählen und dann im selben Fenster die Stopp-Taste drücken.

Varun
quelle
1
Vielen Dank. Du hast mein Leben gerettet. Ich werde Ihre Antwort in 7 Minuten akzeptieren ... :)
Android Eve
1
Eine weitere Möglichkeit hinzufügen, die ich gerade entdeckt habe: Wählen Sie im Emulator Einstellungen> Anwendungen> Anwendungen verwalten> (App auswählen)> Stopp erzwingen.
Android Eve
Ja. Das ist ein anderer Weg, aber es braucht Zeit, um dorthin zu gelangen, es sei denn, Sie haben das im Hintergrund. :)
Varun
11
Eine Stopp-Schaltfläche wie in Visual Studio wäre ach so schön. Pfui.
Ian Davis
Starten Sie die App direkt nach der Projekterstellung und beim Klicken auf die Schaltfläche "Stopp" wurde der Prozess nicht abgebrochen , sondern RemoteException sending setActive(false) notificationim logCat-Ansichtsfenster
Stphane
77

Wenn Sie es mühsam finden, zwischen den Perspektiven zu wechseln, um das Programm zu stoppen (wie ich), können Sie die Gerätefenster in Ihrer aktuellen Perspektive anzeigen, indem Sie auswählen

Windows > Ansicht anzeigen > Andere ... > Android > Geräte

GeekityGeek
quelle
3
Danke, genau das habe ich gesucht! +1
Sabobin
+1. Großartig! Und wenn ich möchte, dass es erneut ausgeführt wird, starte ich es einfach erneut vom Gerät aus und es funktioniert perfekt.
Francisco Corrales Morales
In einem weiteren Schritt finden Sie Ihre packageID in der Liste. Zuerst hat mich das abgeschreckt, aber dann sagte ich: "Oh cool! Ich kann alles sehen." Schön zu sehen, was Android unter seiner Haube hat (Hinweis: Ich verwende den Genymotion-Simulator, vielleicht ist der Emulator das, was Sie sagen, ich kann es einfach nicht ertragen, darauf zu warten, dass er ausgeführt wird)
Stephen J
Dies verletzt den Lebenszyklus der Android-App und kann zu unansehnlichen Exits führen, die dazu führen, dass die App nicht neu gestartet werden kann und ein Neustart des Geräts erzwungen wird, um das Problem zu beheben.
Dominic Cerisano
13

Beachten Sie, dass Programme unter Android im Allgemeinen nur dann "gestoppt" werden, wenn Sie () beenden oder das System sie zerstört, wenn Speicher benötigt wird. Warum überhaupt aufhören? Sie müssen beispielsweise nicht anhalten, um das Problem zu beheben, neu zu installieren oder erneut zu testen.

DJC
quelle
Dies ist eine großartige Einsicht. Danke dir. +1
Android Eve
1
@ Eva .. mein Vergnügen. Weitere Informationen finden Sie unter stackoverflow.com/questions/2033914/…
DJC
4
Vielleicht. Dies beantwortet die Frage jedoch nicht wirklich. In meinem Fall spiele ich mit der AudioTrack-Klasse herum und generiere einen Soundstrom. Es wird wirklich nervig, die ganze Zeit diese Sinuswelle zu hören. Ich muss zu DDMS gehen, den richtigen Thread suchen, ihn auswählen und dann das STOP-Symbol finden. Sehr lahm.
Vagrant
2
Wie können Sie den Status Ihres Programms zurücksetzen, ohne anzuhalten?
Erik Engheim
Ich habe festgestellt, dass der Emulator Ihr Programm erst nach einigen Minuten wieder ausführt (wahrscheinlich, weil er noch ausgeführt wird). Es ist praktisch, früher fertig zu werden, wenn Sie eine kleine Bearbeitung vornehmen müssen, und diese dann schnell im Emulator zu überprüfen. Und oft nehmen Sie mehrere kleine Änderungen vor, sodass Sie viel Zeit sparen, wenn Sie die laufende App stoppen und neu laden können, um sie schnell zu überprüfen.
Azurespot
12

Wählen Sie in der Perspektive "Debuggen" unter "Debuggen" (wo sich die Liste der aktiven Threads befindet) das Stammverzeichnis der Anwendung aus und klicken Sie auf die Schaltfläche Stopp.

Chris Thompson
quelle
Danke dir auch. Ich habe Ihre Anweisungen erst verstanden, nachdem ich @ varun's gelesen hatte. +1
Android Eve
@ Android Eve, ah, ich bin froh, dass es geholfen hat. Entschuldigung, es war nicht klar genug!
Chris Thompson
Das ist okay. Ich bin in Bezug auf die Android-Entwicklung völlig desorientiert, trotz (und vielleicht wegen) langjähriger Entwicklung auf vielen anderen Plattformen.
Android Eve
Ja, dies ist bei weitem die einfachste Lösung. (In der Tat sollte wahrscheinlich die akzeptierte Antwort sein). Die Schaltfläche Stopp ist nur deaktiviert, wenn ein Thread anstelle des obersten Eintrags [Android-Anwendung] markiert ist.
Colin
7

Ich arbeite für mich.

Windows -> Perspektive öffnen -> Andere ... -> DDMS

  1. In der Android-Ansicht im linken Fenster sehen Sie "Geräte". Es sollte eine Liste der Anwendungen vorhanden sein, die gerade ausgeführt werden (Emulator oder physische Geräte). Klicken Sie auf die Anwendung, die Sie schließen möchten. Normalerweise ist der Name der Name des Pakets + der Name der Anwendung
  2. Klicken Sie nun auf das Symbol "Stop".

Um zur normalen Ansicht zurückzukehren, müssen Sie nur die Java-Schaltfläche oben rechts drücken. Sie können dies auch tun, indem Sie Folgendes drücken: Windows -> Perspektive öffnen -> Andere ... -> Java

Zain Ali
quelle
2

Diese Antwort bezieht sich nicht auf Eclipse. Da diese Frage jedoch in einer Google-Suche zum Stoppen eines laufenden Android-Programms auftaucht, möchte ich eine Befehlszeilenmethode anbieten. Führen adb shellSie die PID des Prozesses aus, mit dem Sie den Vorgang beenden möchten. psMeine war beispielsweise:

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

Also dann einfach kill 2097und du solltest den Hauptbildschirm wieder sehen.

jcomeau_ictx
quelle
Verletzung des App-Lebenszyklus. Kann Probleme mit nicht freigegebenen Systemressourcen verursachen und den Neustart des Geräts zum Löschen erzwingen.
Dominic Cerisano
0

Fügen Sie Ihrem Code einen Haltepunkt hinzu, an dem Sie anhalten möchten, und führen Sie ihn dann im Debug-Modus aus, indem Sie F11 drücken.

Salman Khalid
quelle
0

Android Zombies Abbildung 1 - Bei der Untersuchung dieser Antwort wurden viele Zombies getötet

Das Beenden eines Java VM-Prozesses für Android-Anwendungen auf Betriebssystemebene wird nicht empfohlen. Leider ist dies genau das, was das Eclipse-Gerätefenster "stop" tut, ebenso wie System.exit () und der Shell-Befehl "kill".

Dies untergräbt die normalen Methoden des App-Lebenszyklus wie onStop (), onDestroy () und finalize ().

Viele Apps erfordern diese Methoden für ein ordnungsgemäßes Beenden (z. B. wenn sie Systemobjekte wie Sensor, MediaPlayer, Equalizer, Visualizer usw. verwenden).

Diese Systemobjekte hängen mit Zombie-Todesgriffen auf Systemressourcen herum, wenn release () während dieser Lebenszyklusmethoden nicht explizit aufgerufen wird. Siehe Abb. 1 oben. Dies kann einen Neustart einer App verhindern und sogar einen Neustart erfordern. Das ist der unanständige Aspekt.

Die einzige Lösung besteht darin, sicherzustellen, dass Sie Ihre App immer sauber beenden, indem Sie onStop () oder onDestroy () aufrufen oder zumindest finalize (). Der Debugger tut dies ebenso wie das Betriebssystem beim Herunterfahren.

Sie können Ihre App so einstellen, dass SIG_HUP-Ereignisse abgefangen werden, um ein ordnungsgemäßes Beenden der Befehlszeile zu erzwingen.

Das einzige Mal, dass Sie die App-VM beenden würden, ist der ANR-Status (bereits ein Zombie). ANRs müssen behoben werden. Stellen Sie niemals eine App bereit, die in diesen Status wechseln kann. Es ist extrem unhöflich.

Sie können Google Analytics und den Play Store verwenden, um diese bei der Bereitstellung zu überwachen. Sie möchten nicht, dass verärgerte Benutzer nach dem Neustart aufgrund Ihrer Zombie-Anwendung ANR-Bewertungen mit einem Stern abgeben. Sehr schlecht.

Denken Sie daran, dass Android Linux ist: Behandeln Sie es wie ein echtes Betriebssystem und respektieren Sie den App-Lebenszyklus, sonst werden Sie sicherlich der gefürchteten Zombie-Apokalypse gegenüberstehen.

PS: Wenn dir die Zombie-Analogie nicht gefällt, wie wäre es dann mit Fantasia?

Geben Sie hier die Bildbeschreibung ein

Dominic Cerisano
quelle
0

Siehe Bild: 1. Klicken Sie auf DDMS. 2. Aktuelle App auswählen; 3. Klicken Sie auf "Stop" Geben Sie hier die Bildbeschreibung ein

Eugene Bosikov
quelle
Ich mache das und die App hört auf zu debuggen. Es gibt jedoch folgende Fälle: 1- Trennen Sie das Gerät vom USB-Anschluss, führen Sie die App aus, und schließen Sie bei jedem App-Fehler das Debug-Formular. Warten Sie danach, bis das USB-Kabel angeschlossen ist, oder drücken Sie die Taste. 2- Geräte stellen eine Verbindung zu USB her und die App wird ausgeführt (Strg + F11). Anschließend wird die App automatisch im Debug-Modus ausgeführt. Um dies zu lösen, habe ich ein neues Projekt erstellt und nacheinander Dateien in ein neues Projekt kopiert / eingefügt, aber das Gleiche passiert erneut. Jetzt Hilfe?
Ahmad Ebrahimi