2012-04-05 21 views
6

Ben aracılığıyla benim uygulamasında oluşan herhangi yakalanmamış durumları işleme ediyorum:Yakalanmamış bir Excepition işleminden sonra uygulamamı nasıl zombellemekten nasıl kaldırırım?

Thread.setDefaultUncaughtExceptionHandler(this); 

bu UncaughtExceptionListener uygulayan benim başlatıcısı Hareketi idi. İstisnaları hallediyorum ve günlük sunucuma gönderdim, ancak başvurum o zaman bitmiyor. Ev ya da geri düğmesine basılana kadar sadece bir zombi olarak çalışır. İstisnayı ele aldıktan sonra süreci nasıl öldürebilirim?

Düzenleme İşte
(Konu ile) yakalanarak ele alınırsa yakalanmamış istisna atar bir test ve çalışma faaliyettir. Tost, hiçbir zaman kaydedilmez ve istisna kaydedildikten sonra süreç zombi olur.

import android.os.Process; 

Process.killProcess(Process.myPid()); 
+0

İşleyici yönteminde 'finish()' öğesini çağırın. Ayrıca, kullanıcıyı bilgilendirmek için muhtemelen bir açılır iletişim kutusu da isteyebilirsiniz. – Squonk

+0

@MisterSquonk, yapamam, bağlamım çözülmedi. Başlangıçta kritik bir hata mesajı aldım ama tost yaratmayacaktı. Daha sonra bir yayın alıcısı denedim ve bu da işe yaramadı. – AedonEtLIRA

+1

Üzgünüz, anlamıyorum. “Bu” sizin başlatıcınız “Etkinlik” diyorsunuz, bu yüzden işleyici yöntemi bir "Faaliyet" in parçasıysa, bunun üstesinden gelebilmek için bir 'çalışan' bir Etkinlik 'olmalıdır. “Etkinlik” in “Bağlam” ın dolaylı bir alt sınıfı olduğu gerçeği (OOP terimlerinde) “Etkinlik” bir “Bağlam” dır. – Squonk

cevap

1

Ben örnek kodla birlikte bazı testler yaptı ve finish()uncaughtException() den çalışacak keşfetti: orada bu sorun ile ilgili daha hassas bir yoludur, ancak deneyebilirsiniz eğer

class TestActivity extends Activity implements UncaughtExceptionListener { 

    @Override public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     Thread.setDefaultUncaughtExceptionHandler(this); 
     throw new RuntimeException("I'm a destuctive booger."); 

     setContentView(R.layout.activity_test); 
    } 

    @Override public void uncaughtException(Thread thread, Throwable toss) { 
     Log.e(TAG, "An uncaught exception has been recieved.", toss); 
     Toast.makeText(this, "Big Error", Toast.LENGTH_LONG).show(); 
    } 
} 
0

emin değilim. Sessiz, ancak kullanıcı için herhangi bir geri bildirim vermez ve sizin gibi, Toast ya da getApplicationContext() kullanarak bile başka bir görsel mesaj kutusu çağırmak mümkün değildi.

Çalışmaya elde edebildi herhangi bir geri bildirim gönderme tek yolu Context için getApplicationContext() kullanarak bir durum çubuğu Notification göndermek için NotificationManager kullanmaktı.

Üzerinde fazla zaman harcadım ama maalesef, bir kullanıcı bildirimin kendisini tıkladığında işlenecek bir PendingIntent sağlamak zorunda kalıyor. Aynı Activity ile bunu yapmak,için ayarlanmış Activity işlenmemiş bir özel durum oluşturan, sonsuz bir döngüyü riske atabilir. Bununla birlikte, belki de açılacak ve kilitlenmeyi açıklayabilecek bir diyalog temasıyla, Activity arasında bir değişiklik yaratabilirsiniz.

İlgili konular