Come fermare un programma in esecuzione sotto Eclipse?


107

Non riesco a trovare un'opzione per interrompere un programma in esecuzione (sia in modalità di debug che di rilascio).

Quindi per ora, fermo il programma (restituendo il controllo a Eclipse) semplicemente chiudendo l'emulatore.

C'è un modo migliore per farlo? Tale che non ho bisogno di chiudere (e riavviare) l'emulatore?

Risposte:


112

Mi risulta che desideri interrompere la tua app sull'emulatore. Per questo puoi aprire la finestra dei dispositivi (nella prospettiva di debug), selezionare il processo e quindi premere il pulsante di arresto nella stessa finestra.


1
Grazie mille. Mi hai salvato la vita. Accetterò la tua risposta tra 7 minuti ... :)
Android Eve

1
Aggiungendo un altro modo che ho appena scoperto: nell'emulatore seleziona Impostazioni> Applicazioni> Gestisci applicazioni> (seleziona app)> Forza arresto.
Android Eve

Ya. questo è un altro modo, ma ci vuole tempo per arrivarci, a meno che tu non lo abbia in background. :)
Varun

11
un pulsante Stop come in Visual Studio sarebbe davvero carino. ugh.
Ian Davis

È stato appena avviato l'app subito dopo la creazione del progetto e quando si fa clic sul pulsante di interruzione non è stato interrotto il processo ma è RemoteException sending setActive(false) notificationstato attivato
Stphane

77

Coloro che trovano noioso passare da una prospettiva all'altra per interrompere il programma (come ho fatto io), puoi visualizzare le finestre dei dispositivi nella tua prospettiva attuale selezionando

Windows > Mostra vista > Altro ... > Android > Dispositivi


3
Grazie, questo è esattamente quello che stavo cercando! +1
Sabobin

+1. Fantastico! E se voglio che lo esegua di nuovo, lo riavvio dal dispositivo e funziona perfettamente.
Francisco Corrales Morales

Un altro passaggio, trova il tuo ID pacchetto nell'elenco. All'inizio sono stato scoraggiato da questo, ma poi ho pensato "Oh fantastico! Riesco a vedere tutto". Bello vedere cosa ha Android sotto il suo cofano (nota: sto usando il simulatore di Genmony, forse l'emulatore è quello che dici, non posso sopportare di aspettare che funzioni)
Stephen J

Ciò viola il ciclo di vita dell'app Android e può portare a uscite sgradevoli con conseguente impossibilità di riavviare l'app e forzare il riavvio del dispositivo per risolvere il problema.
Dominic Cerisano

13

Tieni presente che su Android, i programmi generalmente si "arrestano" solo se si finisce () o il sistema li distrugge quando è richiesta memoria. Perché fermarsi? Non è necessario fermarsi per riparare / reinstallare / ritestare, ad esempio.


Questa è una grande intuizione. Grazie. +1
Android Eve

1
@Eve .. mio piacere. Per dettagli cruenti, controlla stackoverflow.com/questions/2033914/…
DJC

4
Beh forse. Ma questo non risponde davvero alla domanda. Nel mio caso, sto giocando con la classe AudioTrack e sto generando un flusso di suoni. Diventa davvero fastidioso ascoltare quell'onda sinusoidale tutto il tempo. Devo andare su DDMS, cercare il thread giusto, selezionarlo, quindi trovare l'icona STOP. Molto zoppo.
Vagrant

2
Come puoi resettare lo stato del tuo programma senza fermarti?
Erik Engheim

Ho notato che con l'emulatore non eseguirà più il programma fino a dopo pochi minuti circa (probabilmente perché è ancora in esecuzione). È utile terminare prima, quando è necessario apportare una piccola modifica, quindi controllarlo rapidamente nell'emulatore. E spesso, apporti diverse piccole modifiche, quindi essere in grado di arrestare l'app in esecuzione e ricaricarla per controllare rapidamente fa risparmiare molto tempo.
Azurespot

12

Nella prospettiva "Debug", seleziona la radice dell'applicazione in "Debug" (dove si trova l'elenco dei thread attivi) e fai clic sul pulsante di arresto.


grazie anche a te. Ho capito le tue istruzioni solo dopo aver letto quelle di @ varun. +1
Android Eve

@Android Eve, ah, beh, sono contento che abbia aiutato. Scusa non è stato abbastanza chiaro!
Chris Thompson

Va bene. Sono totalmente disorientato per quanto riguarda lo sviluppo di Android, nonostante (e forse a causa di) molti anni di sviluppo su molte altre piattaforme.
Android Eve

Sì, questa è di gran lunga la soluzione più semplice. (In effetti, dovrebbe essere probabilmente la risposta accettata). Il pulsante Stop è disabilitato solo quando un thread è evidenziato al posto della prima voce [Applicazione Android].
Colin

7

Lavorando per me.

Windows -> Apri prospettiva -> Altro ... -> DDMS

  1. Nella visualizzazione Android, nelle finestre di sinistra, puoi vedere "Dispositivi". Dovrebbe essere presente un elenco di applicazioni in esecuzione al momento (emulatore o dispositivi fisici). Fare clic sull'applicazione che si desidera chiudere. Normalmente il nome è il nome del pacchetto + il nome dell'applicazione
  2. Ora fai clic sul simbolo di "Stop".

Per tornare alla visualizzazione normale, è sufficiente premere sul pulsante Java in alto a destra. Puoi farlo anche premendo: Windows -> Apri prospettiva -> Altro ... -> Java


2

questa risposta non riguarda Eclipse, ma poiché questa domanda viene fuori in una ricerca su Google per interrompere un programma Android in esecuzione, vorrei offrire un metodo da riga di comando. corri adb shell, trova il PID del processo con cui vuoi uccidere ps, ad esempio il mio era:

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

quindi solo kill 2097e dovresti vedere di nuovo la schermata principale.


Violazione del ciclo di vita dell'app. Può causare problemi con le risorse di sistema che non vengono rilasciate e forzare la cancellazione del riavvio del dispositivo.
Dominic Cerisano

0

Aggiungere un punto di interruzione al codice in cui si desidera interrompere e quindi eseguirlo in modalità di debug premendo F11.


0

Zombi Android Figura 1 - Molti zombi sono stati uccisi durante la ricerca di questa risposta

Non è consigliabile terminare un processo Java VM di un'applicazione Android a livello di sistema operativo. Sfortunatamente, questo è esattamente ciò che fa la finestra del dispositivo eclipse "stop", così come System.exit () e il comando "kill" della shell.

Questo sovverte i normali metodi del ciclo di vita delle app come onStop (), onDestroy () e finalize ().

Molte app richiedono questi metodi per un'uscita graduale (ad esempio, se utilizzano oggetti di sistema come Sensor, MediaPlayer, Equalizer, Visualizer, ecc.).

Questi oggetti di sistema si aggirano con le prese di morte degli zombi sulle risorse di sistema se release () non viene chiamato esplicitamente durante questi metodi del ciclo di vita. Vedi fig. 1 sopra. Ciò può impedire il riavvio di un'app e persino richiedere un riavvio. Questo è l'aspetto sgraziato.

L'unica soluzione è assicurarti di uscire sempre dall'app in modo pulito con una chiamata a onStop () o onDestroy () o almeno finalize (). Il debugger lo fa, così come il sistema operativo all'arresto.

Puoi impostare la tua app per intercettare gli eventi SIG_HUP al fine di forzare un'uscita graduale dalla riga di comando.

L'unica volta in cui interromperesti la VM dell'app è in stato ANR (già uno zombie). Gli ANR devono essere corretti. Non distribuire mai un'app che possa entrare in questo stato. È estremamente scortese.

Puoi utilizzare Google Analytics e il Play Store per monitorarli durante la distribuzione. Non vuoi che utenti arrabbiati diano recensioni ANR a stella singola dopo aver dovuto riavviare a causa della tua applicazione zombie. Molto brutto.

Ricorda che Android è Linux: trattalo come un vero sistema operativo e rispetta il ciclo di vita dell'app, altrimenti dovrai sicuramente affrontare la temuta Apocalisse Zombie.

PS: Se non ti piace l'analogia con gli zombi, che ne dici di Fantasia?

inserisci qui la descrizione dell'immagine


0

Vedi immagine: 1. Fare clic su DDMS; 2. Seleziona l'app corrente; 3. Fare clic su "Stop" inserisci qui la descrizione dell'immagine


Lo faccio e l'app smette di eseguire il debug. ma c'è il caso: 1- scollegare il dispositivo da usb, eseguire l'app, quindi quando l'app si trova in errore si chiude e dopo di che ad ogni esecuzione visualizza il modulo di debug e attendi che il cavo USB si connetta o premi il pulsante indietro. 2- il dispositivo si connette a USB e l'app viene eseguita (Ctrl + f11), quindi l'app viene eseguita automaticamente in modalità debug. Per risolvere questo problema, ho creato un nuovo progetto e uno per uno copia / incolla i file nel nuovo progetto, ma la stessa cosa accade di nuovo. Ora qualche aiuto?
Ahmad Ebrahimi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.