Eclipse altında çalışan bir program nasıl durdurulur?


107

Çalışan bir programı durdurmak için bir seçenek bulamıyorum (hata ayıklama veya sürüm modunda).

Bu yüzden şimdilik sadece emülatörü kapatarak programı durduruyorum (kontrolü Eclipse'e döndürüyorum).

Bunu yapmanın daha iyi bir yolu var mı? Öyle ki öykünücüyü kapatmam (ve yeniden başlatmam) gerekmez mi?

Yanıtlar:


112

Uygulamanızı emülatörde durdurmak istediğinizi anlıyorum. Bunun için cihazlar penceresini (hata ayıklama perspektifinde) açabilir, işlemi seçebilir ve ardından aynı pencerede durdur düğmesine basabilirsiniz.


1
Çok teşekkürler. Hayatımı kurtardın. Cevabınızı 7 dakika içinde kabul edeceğim ... :)
Android Eve

1
Yeni keşfettiğim başka bir yol eklemek: emülatörde Ayarlar> Uygulamalar> Uygulamaları yönet> (uygulamayı seçin)> Durmaya zorla'yı seçin.
Android Eve

Ya. bu başka bir yoldur, ancak arka planda yoksa, oraya ulaşmak zaman alır. :)
Varun

11
Visual Studio'daki gibi bir Durdur düğmesi çok güzel olurdu. ugh.
Ian Davis

Sadece proje oluşturulduktan sonra uygulama hakkını başladı ve durdurma düğmesini tıklayarak zaman süreci öldürmedi ama bir ateş RemoteException sending setActive(false) notificationiçinde LogCat viewport
Stphane

77

Programı durdurmak için perspektifler arasında geçiş yapmayı yorucu bulanlar (benim yaptığım gibi), cihaz pencerelerini mevcut perspektifinizde seçerek görüntüleyebilirsiniz.

Windows > Görünümü Göster > Diğer ... > Android > Cihazlar


3
Teşekkürler, tam olarak aradığım buydu! +1
Sabobin

+1. Harika! Ve eğer tekrar çalıştırmasını istersem, cihazdan tekrar başlatırım ve mükemmel çalışıyor.
Francisco Corrales Morales

Bir adım daha, listeden paket kimliğinizi bulun. İlk başta bundan vazgeçmiştim ama sonra "Harika! Her şeyi görebiliyorum" dedim. Android'in kaputunun altında ne olduğunu görmek güzel (not: Genymotion simülatörünü kullanıyorum, belki de söylediğiniz gibi emülatör, çalışmasını beklemeye dayanamıyorum)
Stephen J

Bu, Android uygulamasının yaşam döngüsünü ihlal eder ve uygulamanın yeniden başlatılamaması ve sorunu gidermek için cihazı yeniden başlatmaya zorlamayla sonuçlanan kötü çıkışlara neden olabilir.
Dominic Cerisano

13

Android'de programların genellikle yalnızca bitirirseniz () 'duracağını' veya bellek gerektiğinde sistem bunları yok edeceğini unutmayın. Neden hiç dursun? Örneğin, düzeltmek / yeniden kurmak / yeniden test etmek için durmanıza gerek yoktur.


Bu harika bir fikir. Teşekkür ederim. +1
Android Eve

1
@Eve .. benim için zevk. Kanlı ayrıntılar için stackoverflow.com/questions/2033914/…
adresini

4
Pekala belki. Ama bu gerçekten soruyu cevaplamıyor. Benim durumumda, AudioTrack sınıfıyla oynuyorum ve bir ses akışı oluşturuyorum. Bu sinüs dalgasını her zaman dinlemek gerçekten can sıkıcı oluyor. DDMS'ye gitmem, doğru iş parçacığını bulmam, onu seçmem ve ardından STOP simgesini bulmam gerekiyor. Çok kötü.
Serseri

2
Durdurmadan programınızın durumunu nasıl sıfırlayabilirsiniz?
Erik Engheim

Emulator ile fark ettim, birkaç dakika kadar sonra programınızı tekrar çalıştırmayacaktır (muhtemelen hala çalıştığı için). Küçük bir düzenleme yapmanız gerektiğinde, daha önce bitirmek ve ardından bunu Emülatörde hızlıca kontrol edin. Ve çoğu zaman, birkaç küçük düzenleme yaparsınız, bu nedenle çalışan uygulamayı durdurup hızlıca kontrol etmek için yeniden yükleyebilmek çok zaman kazandırır.
Azurespot

12

"Hata Ayıkla" perspektifinde, "Hata Ayıkla" altında (etkin iş parçacıklarının listelendiği yer) uygulamanın kökünü seçin ve durdur düğmesini tıklayın.


Sana da teşekkürler. Talimatlarınızı ancak @ varun'u okuduktan sonra anladım. +1
Android Eve

@Android Eve, ah, yardımcı olmasına sevindim. Üzgünüm yeterince açık değildi!
Chris Thompson

Bu iyi. Diğer birçok platformda uzun yıllar süren geliştirmeye rağmen (ve belki de bundan dolayı) Android geliştirme konusunda tamamen kafam karıştı.
Android Eve

Evet, bu açık ara en kolay çözümdür. (Aslında, kabul edilen cevap araştırılmalıdır). Durdur düğmesi, yalnızca üstteki [Android Uygulaması] girişi yerine bir ileti dizisi vurgulandığında devre dışı bırakılır.
Colin

7

Benim için çalışıyor.

Windows -> Açık perspektif -> Diğer ... -> DDMS

  1. Android görünümünde, sol pencerede "Cihazlar" görebilirsiniz. Şu anda çalışan uygulamaların bir listesi olmalıdır (emülatör veya fiziksel cihazlar). Kapatmak istediğiniz uygulamaya tıklayın. Normalde ad, paketin adı + uygulamanın adıdır
  2. Şimdi "Durdur" sembolüne tıklayın.

Normal görünüme geri dönmek için, sağ üst taraftaki Java düğmesine basmanız yeterlidir. Şuna da basarak yapabilirsiniz: Windows -> Perspektifi aç -> Diğer ... -> Java


2

bu cevap Eclipse ile ilgilenmez, ancak bu soru çalışan bir Android programını durdurmak için Google aramasında ortaya çıktığından, bir komut satırı yöntemi sunmak istiyorum. çalıştırın adb shell, öldürmek istediğiniz sürecin PID'sini bulun, psörneğin benimki:

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

o zaman sadece kill 2097ve ana ekranın tekrar gösterildiğini görmelisiniz.


Uygulama yaşam döngüsü ihlali. Serbest bırakılmayan sistem kaynaklarıyla ilgili sorunlara neden olabilir ve cihazın yeniden başlatılmasını temizlemeye zorlayabilir.
Dominic Cerisano

0

Durdurmak istediğiniz kodunuza kesme noktası ekleyin ve ardından F11'e basarak Hata Ayıklama modunda çalıştırın.


0

Android Zombiler Şekil 1 - Bu Cevabın araştırılması sırasında birçok Zombi öldürüldü

Bir Android uygulaması Java VM işleminin işletim sistemi düzeyinde sonlandırılması önerilmez. Ne yazık ki, System.exit () ve kabuk "kill" komutunun yaptığı gibi, tutulma aygıtı penceresinin "durdur" yaptığı da tam olarak budur.

Bu, onStop (), onDestroy () ve finalize () gibi normal uygulama yaşam döngüsü yöntemlerini altüst eder.

Pek çok uygulama, zarif çıkış için bu yöntemleri gerektirir (örneğin, Sensör, MediaPlayer, Ekolayzer, Görselleştirici, vb. Gibi sistem nesneleri kullanıyorsa).

Bu yaşam döngüsü yöntemleri sırasında release () açıkça çağrılmazsa, bu sistem nesneleri sistem kaynaklarında zombi ölüm tutuşlarıyla takılır. Bkz. Şek. 1 yukarıda. Bu, bir uygulamanın yeniden başlatılmasını engelleyebilir ve hatta yeniden başlatma gerektirebilir. Bu nezaketsiz yönüdür.

Tek çözüm, onStop () veya onDestroy () veya en azından finalize () çağrısıyla uygulamanızdan her zaman temiz bir şekilde çıktığınızdan emin olmaktır. Hata ayıklayıcı, işletim sistemi kapatıldığında olduğu gibi bunu yapar.

Komut satırından zarif bir şekilde çıkmaya zorlamak için uygulamanızı SIG_HUP olaylarını yakalayacak şekilde ayarlayabilirsiniz.

Uygulama sanal makinesini öldüreceğiniz tek zaman ANR (zaten zombi) durumundadır. ANR'ler düzeltilmelidir. Bu duruma girebilecek bir uygulamayı asla dağıtmayın. Bu son derece kaba.

Dağıtım sırasında bunları izlemek için Google analizini ve Play Store'u kullanabilirsiniz. Zombi uygulamanız nedeniyle yeniden başlatmak zorunda kaldıktan sonra öfkeli kullanıcıların tek yıldızlı ANR incelemeleri vermesini istemezsiniz. Çok kötü.

Android'in Linux olduğunu unutmayın: ona gerçek bir işletim sistemi gibi davranın ve uygulamanın yaşam döngüsüne saygı gösterin, aksi takdirde kesinlikle korkunç Zombie Apocalypse ile karşılaşacaksınız.

Not: Zombi benzetmesini beğenmediyseniz, Fantasia'ya ne dersiniz?

görüntü açıklamasını buraya girin


0

Resme bakın: 1. DDMS'ye tıklayın; 2. Mevcut uygulamayı seçin; 3. "Durdur" u tıklayın görüntü açıklamasını buraya girin


Bunu yapıyorum ve uygulama hata ayıklamayı durduruyor. ancak durum var: 1- USB'den cihazı ayırın, uygulamayı çalıştırın, ardından uygulama yüz hatası kapandığında kapanır ve bundan sonra her çalıştırmada hata ayıklama formunu açın ve usb kablosunun bağlanmasını veya geri düğmesine basmasını bekleyin. 2- cihaz usb'ye bağlanır ve uygulama çalıştırılır (Ctrl + f11), ardından uygulama otomatik olarak hata ayıklama modunda çalışır. Bunu çözmek için yeni bir proje oluşturdum ve dosyaları yeni projeye tek tek kopyalayıp / yapıştırdım ama aynı şey yine oluyor. Şimdi herhangi bir yardım var mı?
Ahmad Ebrahimi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.