Neden Hata Alıyorum 'Kanal kurtarılamayacak şekilde bozuldu ve imha edilecek!'


110

AndEngine Etkinliğimi başlatmaya çalıştığımda şu hatayı alıyorum:

ERROR/InputDispatcher(21374): channel '4122e148 my.package.AcGame (server)' ~ Channel is unrecoverably broken and will be disposed!

Uygulama çökmüyor, ancak siyah bir ekran var ve cihaz 'geri' veya 'ana sayfa' düğmelerine basmaya tepki vermiyor.

Problemin ne olduğunu bilen kimse var mı?


Verdiğiniz bilgilerden pek tahmin edilemiyor (Lütfen daha fazlasını ekleyin). Ancak bu yardımcı olabilir: stackoverflow.com/questions/5551929/inputdispatcher-error Bellek sızıntılarını kontrol edin.
Jong

10
Bu hata, bir uygulama kilitlendikten (veya zorla durdurulduktan) sonra ortaya çıkar. Android'de giriş olaylarını (dokunmatik ekran baskıları vb.) Uygulamanıza ileten kısım, hedefinin artık orada olmadığını fark etti. Bundan önce meydana gelen bir hatayı arayın.
zapl

1
@uncle Lem, Bro ben bile aynı konuya takılı kaldım. Telefonu yeniden başlatana kadar herhangi bir işlem yapamıyorum. herhangi bir çözüm buldun mu? Bu sorundan bıktım ..
krishnamurthy

Yanıtlar:


41

Bu hatayı görmemin en yaygın nedenlerinden biri, ön planda olmayan bir etkinlikte bir uyarı iletişim kutusu veya ilerleme iletişim kutusu görüntülemeye çalıştığım zamandır. Duraklatılmış bir aktivitede bir iletişim kutusu görüntüleyen bir arka plan iş parçacığının çalışması gibi.


2
OnPause'da iletişim kutusunu null olarak ayarlayın ve iletişim kutusunu arka plan iş parçacığında görüntülemeden önce null olup olmadığını kontrol edin.
Lou Morda

Benim durumumda hatayı aldım çünkü onResume (), onStart, onStop, onPause, onDestroy ve onLowMemory yöntemlerini yorumladım. İpucu için teşekkürler @LouMorda!
Maryoomi 1


7

Başka bir UI dizisi kullandınız mı? 1'den fazla UI iş parçacığı kullanmamalı ve bunu bir sandviç gibi göstermemelisiniz. Bunu yapmak bellek sızıntılarına neden olur.

2 gün önce benzer bir sorunu çözdüm ...

İşleri kısa tutmak için: Ana iş parçacığı, birden çok iş yapmak için birçok UI iş parçacığına sahip olabilir, ancak içinde bir UI iş parçacığı içeren bir alt iş parçacığı varsa, UI iş parçacığı işini henüz bitirmemiş olabilir, ancak ana iş parçacığı zaten bitirdi. iş, bu bellek sızıntılarına neden olur.

Örneğin ... Fragment & UI uygulaması için ... bu bellek sızıntılarına neden olur.

getActivity().runOnUiThread(new Runnable(){

   public void run() {//No.1

  ShowDataScreen();

getActivity().runOnUiThread(new Runnable(){

    public void run() {//No.2

Toast.makeText(getActivity(), "This is error way",Toast.LENGTH_SHORT).show();

    }});// end of No.2 UI new thread

}});// end of No.1 UI new thread

Çözümüm aşağıdaki gibi yeniden düzenleniyor:

getActivity().runOnUiThread(new Runnable(){

   public void run() {//No.1

ShowDataScreen();

}});// end of No.1 UI new thread        

getActivity().runOnUiThread(new Runnable(){

   public void run() {//No.2

Toast.makeText(getActivity(), "This is correct way",Toast.LENGTH_SHORT).show();

}});// end of No.2 UI new thread

referans için.

Ben Tayvanlıyım, burada bir kez daha cevap vermekten mutluluk duyuyorum.


6

Bu çıktıyla ilgili kaynak kodunu burada görebilirsiniz :

void InputDispatcher::onDispatchCycleBrokenLocked(
        nsecs_t currentTime, const sp<Connection>& connection) {
    ALOGE("channel '%s' ~ Channel is unrecoverably broken and will be disposed!",
            connection->getInputChannelName());
    CommandEntry* commandEntry = postCommandLocked(
            & InputDispatcher::doNotifyInputChannelBrokenLockedInterruptible);
    commandEntry->connection = connection;
}

Döngüden dolayı kırılmış kilitli ...


14
Açıklayabilir misiniz, döngü kırılmış kilitli ne anlama geliyor?
Jaydev

4

Bir şeyi yeniden adlandırdıktan strings.xmlve diğer dosyaları (bir tercih xml kaynak dosyası ve java kodu) değiştirmeyi unuttuktan sonra benzer bir hata aldım (uygulamam çöküyor ).

IDE (android stüdyo) herhangi bir hata göstermedi. Ancak, xml dosyalarımı ve java kodunu onardıktan sonra, uygulama sorunsuz çalıştı. Yani, xml dosyalarınızda veya sabitlerinizde bazı küçük hatalar olabilir.


Yine de anlaşılamayacak kadar genelleştirilmiş :)
Naga

2

Ben de aynı sorunu yaşadım. Benimki üçüncü bir kavanozdan kaynaklanıyordu, ancak logcat istisnayı yakalamadı, üçüncü kavanozu güncelleyerek çözdüm, umarım bunlar yardımcı olur.


2

Bu hatayla karşılaştığımda, kodunuzun bir yerinde kullanılan işlevleriniz veya kitaplıklarınız farklı iş parçacıkları üzerinde çalışıyor, bu yüzden aynı iş parçacığındaki tüm kodu aramaya çalışın, sorunumu çözdü.

Uygulamanızın UI iş parçacığı dışındaki herhangi bir iş parçacığından WebView'da yöntemler çağırırsanız, beklenmeyen sonuçlara neden olabilir. Örneğin, uygulamanız birden çok iş parçacığı kullanıyorsa, kodunuzun UI iş parçacığında yürütüldüğünden emin olmak için runOnUiThread () yöntemini kullanabilirsiniz:

Google referans bağlantısı


1

Aynı sorunu yaşadım ama benimki bir Android veritabanı bellek sızıntısı nedeniyle oldu. Bir imleci atladım. Bu nedenle, bellek sızıntısını gidermek için cihaz çöküyor. Android veritabanıyla çalışıyorsanız, veritabanından alırken bir imleci atlayıp atlamadığınızı kontrol edin


O uygulamada hiç veritabanı kullanmadım. Bana bu hataya neden olabilecek BİRÇOK seçenek varmış gibi geliyor.
Lem amca

1

And-engine kullanarak bir oyun çalıştırırken benim için de oldu. Aşağıdaki kodu manifest.xml dosyama ekledikten sonra düzeltildi. Bu kod, ana faaliyet durumunuza eklenmelidir.

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|mcc|mnc"

1

Ben de aynı sorunu yaşadım. Hatayı çözmek için: Emülatörde kapatın ve ardından Android Studio kullanarak çalıştırın.

Hata, uygulama öykünücüde zaten çalışırken uygulamayı yeniden çalıştırmayı denediğinizde ortaya çıkar.

Temel olarak hata , uygulamayı Android Studio'dan tekrar çalıştırdığınız için "Artık mevcut kanala sahip değilim ve zaten kurulmuş olan bağlantıyı atıyorum" diyor .


Genymotion öykünücüsünü kapattı. Öykünücüyü tekrar açtım. Bu sefer kilitlenen uygulama yok :)
Emily Alexandra Conroyd


1

Benim durumumda bu iki sorun, ön planda olmayan bir etkinlikte ilerleme iletişim kutusunu görüntülemeye çalıştığım bazı durumlarda ortaya çıkıyor. Bu nedenle, etkinlik yaşam döngüsünün Duraklat'ındaki ilerleme iletişim kutusunu kapatıyorum . Ve sorun çözüldü.

Bu animatör bağımsız bir görünümde başlatılamaz! HATA ortaya çıkar

CEVAP: Bu animatör bağımsız bir görünümde başlatılamaz! etkisi ortaya çıkarmak

Neden Hata Alıyorum 'Kanal kurtarılamayacak şekilde kırıldı ve elden çıkarılacak!

CEVAP: Neden Hata Alıyorum 'Kanal kurtarılamayacak şekilde bozuldu ve imha edilecek!'

@Override
protected void onPause() {
    super.onPause();
    dismissProgressDialog();

}

private void dismissProgressDialog() {
    if(progressDialog != null && progressDialog.isShowing())
        progressDialog.dismiss();
}

1

Bu sorunu yaşadım ve nedeni aslında bir NullPointerException idi. Ama bana tek olarak sunulmadı!

Çıktım: ekran çok uzun bir süre takıldı ve ANR

Durumum: düzen xml dosyası başka bir düzene dahil edildi, ancak ekli düzende kimlik vermeden dahil edilen görünüme başvuruldu. (aynı alt görünümün iki benzer uygulamasına daha sahiptim, bu nedenle kaynak kimliği verilen adla oluşturuldu)

Not: Özel İletişim Kutusu düzeniydi, bu nedenle önce iletişim kutularını kontrol etmek biraz yardımcı olabilir

Sonuç: Çocuk görünümünün kimliği aranırken bazı bellek sızıntıları oldu.


1

Bu hata, bellek sızıntısı durumunda meydana geldi. Örneğin, bir Android bileşeninin (Etkinlik / hizmet / vb.) Statik bağlamınız varsa ve sistem tarafından öldürülürse.

Örnek: Bildirim alanındaki müzik çalar kontrolleri. Bir ön plan hizmeti kullanın ve aşağıdaki gibi PendingIntent aracılığıyla bildirim kanalında eylemler ayarlayın.

Intent notificationIntent = new Intent(this, MainActivity.class);
        notificationIntent.setAction(AppConstants.ACTION.MAIN_ACTION);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                notificationIntent, 0);

        Intent previousIntent = new Intent(this, ForegroundService.class);
        previousIntent.setAction(AppConstants.ACTION.PREV_ACTION);
        PendingIntent ppreviousIntent = PendingIntent.getService(this, 0,
                previousIntent, 0);

        Intent playIntent = new Intent(this, ForegroundService.class);
        playIntent.setAction(AppConstants.ACTION.PLAY_ACTION);
        PendingIntent pplayIntent = PendingIntent.getService(this, 0,
                playIntent, 0);

        Intent nextIntent = new Intent(this, ForegroundService.class);
        nextIntent.setAction(AppConstants.ACTION.NEXT_ACTION);

        Bitmap icon = BitmapFactory.decodeResource(getResources(),
                R.drawable.ic_launcher);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        String NOTIFICATION_CHANNEL_ID = "my_channel_id_01";

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "My Notifications", NotificationManager.IMPORTANCE_HIGH);

            // Configure the notification channel.
            notificationChannel.setDescription("Channel description");
            notificationChannel.enableLights(true);
            notificationChannel.setLightColor(Color.RED);
            notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
            notificationChannel.setVibrationPattern(new long[]{0, 1000, 500, 1000});
            notificationChannel.enableVibration(true);
            notificationManager.createNotificationChannel(notificationChannel);
        }

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
        Notification notification = notificationBuilder
                .setOngoing(true)
                .setAutoCancel(true)
                .setWhen(System.currentTimeMillis())
                .setContentTitle("Foreground Service")
                .setContentText("Foreground Service Running")
                .setSmallIcon(R.drawable.ic_launcher)
                .setLargeIcon(Bitmap.createScaledBitmap(icon, 128, 128, false))
                .setContentIntent(pendingIntent)
                .setPriority(NotificationManager.IMPORTANCE_MAX)
                .setCategory(Notification.CATEGORY_SERVICE)
                .setTicker("Hearty365")
                .build();
        startForeground(AppConstants.NOTIFICATION_ID.FOREGROUND_SERVICE,
                notification);

Ve bu bildirim kanalı aniden bozulursa (arka plan uygulamalarını temizlediğimizde Xiomi cihazlarında olduğu gibi sistem tarafından olabilir), bellek sızıntıları nedeniyle bu hata sistem tarafından atılır.


1
Merhaba, sanırım bu benim sorunum olabilir. Medya oynatıcımı her kapattığımda bu hatayı görüyorum. Her şeyi doğru temizlediğimi düşünüyorum, bildirimi gizliyorum, alıcıların kaydını siliyorum vb. Ama yine de bu mesajı alıyorum. Uygulama davranışı bundan etkilenmez, ancak yine de düzeltmek istiyorum. Bundan kaçınmak için ne yapmalıyım?
JeCh

@JeCh bir şey buldu mu?
vaibhavS

1

Benim için çok büyük (4000x2000'in üzerinde) bir açılış ekranı görüntüsünden kaynaklanıyordu. Boyutları küçüldükten sonra sorun ortadan kalktı.


0

Tüm katkıları okuduktan sonra, birçok farklı köken bu aynı sorun belirtilerine neden oluyor gibi görünüyor.

Mesela benim durumumda - eklediğim anda bu sorunu aldım

android:progressBackgroundTintMode="src_over"

ilerleme çubuğu özelliklerime. ADT'nin GUI tasarımcısının birkaç hatayla tanındığını düşünüyorum. Dolayısıyla bunun onlardan biri olduğunu varsayıyorum. Dolayısıyla, GUI kurulumunuzla oynadıktan sonra benzer sorun belirtileriyle karşılaşırsanız (bu mantıklı değil), yaptığınız şeyi geri almaya çalışın ve son GUI değişikliklerinizi geri alın.

Ekranda en son değiştirilen dosya ile Ctrl + z tuşlarına basmanız yeterlidir.

Veya:

Sürüm Kontrolü aracı yardımcı olabilir. Sürüm Kontrol panelini açın - Yerel Değişiklikler sekmesini seçin ve en son değiştirilen (belki .xml) dosyaları görün.

En şüpheli olanı sağ tıklayın ve Farkı Göster'i tıklayın. Sonra hangi değiştirilmiş satırın sorumlu olabileceğini tahmin edin.

İyi şanslar :)


0

Benim durumumda Glide kitaplığı kullanıyordum ve ona geçen görüntü boştu. Yani bu hatayı atıyordu. Bunun gibi bir çek koydum:

if (imageData != null) {
    // add value in View here 
}

Ve iyi çalıştı. Umarım bu birine yardımcı olur.


0

Aynı logcat mesajını aldım, sadece dizinin string.xml değerinin sayı / rakam olamayacağını, ancak yalnızca metin / alfabeye izin verildiğini fark ettim.


0

Benim durumumda bu hata, firebase firestore'a bağlı olmadığı, ancak aynı şeyi kullandığı için oluyor.

Sorunu düzeltmek için lütfen Araçlar-> Firebase'e gidin

RHS'de bir pencere açıldığında -> Uygulamanızı Firebase'e bağlayın -> Cloud Firestore'u uygulamanıza ekleyin

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.