Jak zatrzymać program działający pod Eclipse?

107

Nie mogę znaleźć opcji zatrzymania uruchomionego programu (w trybie debugowania lub wydania).

Więc na razie zatrzymuję program (zwracając kontrolę do Eclipse) po prostu zamykając emulator.

Czy jest lepszy sposób na zrobienie tego? Takich, że nie muszę zamykać (i restartować) emulatora?

Android Eve
źródło

Odpowiedzi:

112

Rozumiem, że chcesz zatrzymać swoją aplikację na emulatorze. W tym celu możesz otworzyć okno urządzeń (w perspektywie debugowania), wybrać proces, a następnie nacisnąć przycisk zatrzymania w tym samym oknie.

Varun
źródło
1
Dzięki wielkie. Uratowałeś mi życie. Przyjmuję twoją odpowiedź za 7 minut ... :)
Android Eve
1
Dodanie innego sposobu, który właśnie odkryłem: w emulatorze wybierz Ustawienia> Aplikacje> Zarządzaj aplikacjami> (wybierz aplikację)> Wymuś zatrzymanie.
Android Eve
Ya. to jest inny sposób, ale dotarcie tam wymaga czasu, chyba że masz to w tle. :)
Varun
11
przycisk Stop jak w Visual Studio byłby taki miły. ugh.
Ian Davis,
Właśnie uruchomiłem aplikację zaraz po utworzeniu projektu i po kliknięciu przycisku zatrzymania nie zabiło procesu, ale uruchomiło RemoteException sending setActive(false) notificationw widoku logCat
Stphane
77

Ci, którzy uważają to za żmudne przełączanie się między perspektywami w celu zatrzymania programu (tak jak ja), mogą wyświetlić okna urządzeń w bieżącej perspektywie, wybierając

Windows > Pokaż widok > Inne ... > Android > Urządzenia

GeekityGeek
źródło
3
Dzięki, właśnie tego szukałem! +1
Sabobin
+1. Świetnie!, A jeśli chcę, żeby znowu go uruchomił, po prostu uruchamiam go ponownie z urządzenia i działa idealnie.
Francisco Corrales Morales
Jeszcze jeden krok, znajdź swój identyfikator pakietu na liście. Na początku mnie to zniechęciło, ale potem pomyślałem: „O super! Widzę wszystko”. Miło widzieć, co Android ma pod maską (uwaga: używam symulatora Genymotion, może emulator jest tym, co mówisz, po prostu nie mogę znieść czekania na jego uruchomienie)
Stephen J
Narusza to cykl życia aplikacji na Androida i może prowadzić do niezręcznych wyjść, powodujących niemożność ponownego uruchomienia aplikacji i wymuszenie ponownego uruchomienia urządzenia w celu usunięcia problemu.
Dominic Cerisano
13

Należy pamiętać, że w systemie Android programy zazwyczaj „zatrzymują się” tylko wtedy, gdy zakończysz () lub system niszczy je, gdy wymagana jest pamięć. Po co w ogóle się zatrzymywać? Na przykład nie musisz zatrzymywać się, aby naprawić / ponownie zainstalować / ponownie przetestować.

DJC
źródło
To świetny wgląd. Dziękuję Ci. +1
Android Eve
1
@ Ewa .. z przyjemnością. Krwawe szczegóły znajdziesz na stackoverflow.com/questions/2033914/…
DJC
4
Być może. Ale to tak naprawdę nie odpowiada na pytanie. W moim przypadku bawię się klasą AudioTrack i generuję strumień dźwięków. To naprawdę denerwujące, gdy słucha się tej sinusoidy przez cały czas. Muszę przejść do DDMS, odszukać odpowiedni wątek, zaznaczyć go, a następnie znaleźć ikonę STOP. Bardzo kiepski.
Vagrant
2
Jak możesz zresetować stan programu bez zatrzymywania?
Erik Engheim
Zauważyłem, że w przypadku Emulatora program nie uruchomi się ponownie przed upływem kilku minut (prawdopodobnie dlatego, że nadal działa). Przydaje się zakończyć wcześniej, gdy trzeba dokonać małej edycji, a potem szybko sprawdzić to w Emulatorze. Często wprowadzasz kilka drobnych zmian, więc możliwość zatrzymania uruchomionej aplikacji i ponownego załadowania jej w celu szybkiego sprawdzenia oszczędza dużo czasu.
Azurespot
12

W perspektywie „Debuguj” wybierz katalog główny aplikacji w sekcji „Debuguj” (gdzie znajduje się lista aktywnych wątków) i kliknij przycisk zatrzymania.

Chris Thompson
źródło
dziękuję też. Zrozumiałem twoje instrukcje dopiero po przeczytaniu @ varun's. +1
Android Eve
@Android Eve, ah, cieszę się, że pomogło. Przepraszam, że to nie było wystarczająco jasne!
Chris Thompson,
W porządku. Jestem całkowicie zdezorientowany, jeśli chodzi o rozwój Androida, pomimo (a być może z powodu) wielu lat rozwoju na wielu innych platformach.
Android Eve
Tak, to zdecydowanie najłatwiejsze rozwiązanie. (W rzeczywistości powinna być akceptowaną odpowiedzią). Przycisk Zatrzymaj jest wyłączony tylko wtedy, gdy wątek jest podświetlony zamiast górnej pozycji [Aplikacja Android].
Colin,
7

Pracuje dla mnie.

Windows -> Otwórz perspektywę -> Inne ... -> DDMS

  1. W widoku Androida w lewym oknie możesz zobaczyć „Urządzenia”. Powinna istnieć lista uruchomionych aplikacji (emulator lub urządzenia fizyczne). Kliknij aplikację, którą chcesz zamknąć. Zwykle nazwa to nazwa pakietu + nazwa aplikacji
  2. Teraz kliknij symbol „Stop”.

Aby wrócić do normalnego widoku, wystarczy nacisnąć przycisk Java w prawym górnym rogu. Możesz to również zrobić naciskając: Windows -> Otwórz perspektywę -> Inne ... -> Java

Zain Ali
źródło
2

ta odpowiedź nie dotyczy Eclipse, ale ponieważ to pytanie pojawia się w wyszukiwarce Google w celu zatrzymania uruchomionego programu na Androida, chciałbym zaoferować metodę wiersza poleceń. uruchom adb shell, znajdź PID procesu, którym chcesz zabić ps, na przykład mój był:

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

więc po prostu kill 2097i powinieneś zobaczyć ponownie główny ekran.

jcomeau_ictx
źródło
Naruszenie cyklu życia aplikacji. Może powodować problemy z nie zwalnianiem zasobów systemowych i wymuszać wyczyszczenie ponownego uruchomienia urządzenia.
Dominic Cerisano
0

Dodaj punkt przerwania do kodu, w którym chcesz zatrzymać, a następnie uruchom go w trybie debugowania, naciskając klawisz F11.

salman khalid
źródło
0

Android Zombies Rysunek 1 - Wiele zombie zostało zabitych podczas badania tej odpowiedzi

Zabijanie procesu Java VM aplikacji na Androida na poziomie systemu operacyjnego nie jest zalecane. Niestety, dokładnie to robi okno urządzenia zaćmienia „stop”, podobnie jak System.exit () i polecenie powłoki „kill”.

To podważa normalne metody cyklu życia aplikacji, takie jak onStop (), onDestroy () i finalize ().

Wiele aplikacji wymaga tych metod do łagodnego wyjścia (na przykład, jeśli używają obiektów systemowych, takich jak Sensor, MediaPlayer, Equalizer, Visualizer itp.).

Te obiekty systemowe kręcą się wokół zasobów systemowych z uchwytami śmierci zombie, jeśli release () nie jest wywoływany jawnie podczas tych metod cyklu życia. Patrz rys. 1 powyżej. Może to uniemożliwić ponowne uruchomienie aplikacji, a nawet wymagać ponownego uruchomienia. To jest niewdzięczny aspekt.

Jedynym rozwiązaniem jest upewnienie się, że zawsze czysto zamykasz aplikację za pomocą wywołania onStop () lub onDestroy () lub przynajmniej finalize (). Debugger robi to, podobnie jak system operacyjny podczas zamykania.

Możesz ustawić aplikację, aby przechwytywała zdarzenia SIG_HUP, aby wymusić bezpieczne wyjście z wiersza poleceń.

Jedyny przypadek, w którym można zabić maszynę wirtualną aplikacji, znajduje się w stanie ANR (już jest zombie). Błędy ANR muszą zostać naprawione. Nigdy nie wdrażaj aplikacji, która może wejść w ten stan. To jest wyjątkowo niegrzeczne.

Możesz użyć Google Analytics i Sklepu Play, aby monitorować ich wdrażanie. Nie chcesz, aby źli użytkownicy wystawiali recenzje ANR z jedną gwiazdką po ponownym uruchomieniu z powodu aplikacji zombie. Bardzo źle.

Pamiętaj, że Android to Linux: traktuj go jak prawdziwy system operacyjny i szanuj cykl życia aplikacji, w przeciwnym razie z pewnością zmierzysz się z przerażającą apokalipsą zombie.

PS: Jeśli nie lubisz analogii z zombie, to co powiesz na Fantazję?

wprowadź opis obrazu tutaj

Dominic Cerisano
źródło
0

Zobacz zdjęcie: 1. Kliknij DDMS; 2. Wybierz bieżącą aplikację; 3. Kliknij „Stop” wprowadź opis obrazu tutaj

Eugene Bosikov
źródło
Robię to i aplikacja przestaje debugować. ale jest przypadek: 1 - odłącz urządzenie od USB, uruchom aplikację, a gdy pojawi się błąd aplikacji, zamyka się, a następnie przy każdym uruchomieniu wywołuje formularz debugowania i czeka na podłączenie kabla USB lub naciśnięcie przycisku wstecznego. 2- urządzenie łączy się z USB i uruchamia aplikację (Ctrl + F11), a następnie automatycznie uruchamia aplikację w trybie debugowania. Aby rozwiązać ten problem, utworzyłem nowy projekt i jeden po drugim kopiowałem / wklejałem pliki do nowego projektu, ale to samo dzieje się ponownie. Teraz jakaś pomoc?
Ahmad Ebrahimi