Waarom ik een foutmelding krijg ‘Kanaal is onherstelbaar kapot en wordt verwijderd!’

Als ik mijn AndEngine Activityprobeer te starten, krijg ik deze foutmelding:

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

De app crasht niet, maar er is een zwart scherm en het apparaat reageert niet op het indrukken van de ‘terug’- of ‘home’-knop.

Weet iemand wat het probleem is?


Antwoord 1, autoriteit 100%

Een van de meest voorkomende redenen waarom ik die fout zie, is wanneer ik een waarschuwingsvenster of voortgangsvenster probeer weer te geven in een activiteit die niet op de voorgrond staat. Zoals wanneer een achtergrondthread waarin een dialoogvenster wordt weergegeven, wordt uitgevoerd in een onderbroken activiteit.


Antwoord 2, autoriteit 32%

Ik denk dat je ergens geheugenlekken hebt. hiervind je tips om te voorkomen dat je geheugen lekt. Ook kunt u hierinformatie vinden over tools om het op te sporen.


Antwoord 3, autoriteit 15%

Heb je een andere UI-thread gebruikt? Je moet niet meer dan 1 UI-thread gebruiken en het op een sandwich laten lijken. Als u dit doet, ontstaan ​​er geheugenlekken.

Ik heb een soortgelijk probleem 2 dagen geleden opgelost…

Om het kort te houden: de hoofdthread kan veel UI-threads hebben om meerdere werken uit te voeren, maar als een subthread met een UI-thread erin zit, is de UI-thread mogelijk nog niet klaar met werken terwijl de bovenliggende thread dat wel heeft. zijn werk al heeft voltooid, veroorzaakt dit geheugenlekken.

Bijvoorbeeld…voor Fragment & UI-toepassing … dit veroorzaakt geheugenlekken.

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

Mijn oplossing is herschikken zoals hieronder:

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

ter referentie.

Ik ben Taiwanees, ik ben blij om hier nog een keer te antwoorden.


Antwoord 4, autoriteit 11%

U kunt de broncode over deze uitvoer bekijken hier:

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;
}

Het wordt veroorzaakt door een kapotte cyclus…


Antwoord 5, autoriteit 11%

Ik kreeg een soortgelijke fout (mijn app crasht) nadat ik iets hernoemde in strings.xmlen vergat andere bestanden aan te passen (een voorkeurs-xml-bronbestand en java-code).

IDE (android studio) liet geen fouten zien. Maar nadat ik mijn xml-bestanden en java-code had gerepareerd, werkte de app goed. Dus misschien zijn er enkele kleine fouten in uw xml-bestanden of constanten.


Antwoord 6, autoriteit 6%

Ik had hetzelfde probleem.
Om de fout op te lossen:
Sluit het op de emulator en voer het vervolgens uit met Android Studio.

De fout treedt op wanneer u de app opnieuw probeert uit te voeren terwijl de app al op de emulator draait.

In feite zegt de fout – “Ik heb het bestaande kanaal niet meer en verwijder de reeds tot stand gebrachte verbinding”omdat je de app opnieuw hebt uitgevoerd vanuit Android Studio.


Antwoord 7, autoriteit 4%

Ik had hetzelfde probleem, maar de mijne was te wijten aan een geheugenlek in de Android-database. Ik heb een cursor overgeslagen. Dus het apparaat crasht om dat geheugenlek te verhelpen. Als u met de Android-database werkt, controleer dan of u een cursor hebt overgeslagen tijdens het ophalen uit de database


Antwoord 8, autoriteit 4%

Ik had hetzelfde probleem. De mijne was te wijten aan een derde pot, maar de logcat heeft de uitzondering niet opgevangen, ik heb het opgelost door de derde pot bij te werken, ik hoop dat deze zullen helpen.


Antwoord 9, autoriteit 4%

Toen ik deze fout tegenkwam, draaiden ergens in je code je funcs of bibliotheken die vroeger op verschillende threads, dus probeer alle code op dezelfde thread aan te roepen, het loste mijn probleem op.

Als u methoden op WebView aanroept vanuit een andere thread dan de UI-thread van uw app, kan dit onverwachte resultaten veroorzaken. Als uw app bijvoorbeeld meerdere threads gebruikt, kunt u de methode runOnUiThread() gebruiken om ervoor te zorgen dat uw code wordt uitgevoerd op de UI-thread:

Google-referentielink


Antwoord 10, autoriteit 4%

Het is duidelijk dat dit door veel problemen sluipt.
Voor mij plaatste ik verschillende OneTimeWorkRequests, elk met toegang tot een database van een enkele kamer en ingevoegd in een enkele tabel.

Door de DAO-functies opgeschort te maken en ze aan te roepen binnen het bereik van de werknemer, loste dit voor mij op.


Antwoord 11, autoriteit 2%

Het gebeurde bij mij ook tijdens het spelen van een game met and-engine.
Het was opgelost nadat ik de onderstaande code aan mijn manifest.xml had toegevoegd. Deze code moet worden toegevoegd aan je hoofdactiviteit.

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

Antwoord 12, autoriteit 2%

Als je alle bijdragen doorleest, lijkt het erop dat veel verschillende oorzaken dezelfde probleemsymptomen vertonen.

In mijn geval bijvoorbeeld – ik kreeg dit probleem zodra ik het toevoegde

android:progressBackgroundTintMode="src_over"

naar de eigenschappen van mijn voortgangsbalk.
Ik denk dat de GUI-ontwerper van ADT bekend staat om verschillende bugs. Daarom neem ik aan dat dit er een van is. Dus als je soortgelijke probleemsymptomen (die gewoon niet logisch zijn) tegenkomt na het spelen met je GUI-configuratie, probeer dan gewoon terug te draaien wat je deed en je laatste GUI-aanpassingen ongedaan te maken.

Druk gewoon op Ctrl+z met het onlangs gewijzigde bestand op het scherm.

Of:

Het hulpprogramma versiebeheer kan nuttig zijn. Open het paneel Versiebeheer – kies het tabblad Lokale wijzigingen en bekijk recent gewijzigde (misschien .xml) bestanden.

Klik met de rechtermuisknop op de meest verdachte en klik op Show Diff.
Raad dan welke gewijzigde regel verantwoordelijk zou kunnen zijn.

Veel succes 🙂


Antwoord 13, autoriteit 2%

Ik had hetzelfde probleem ook. In mijn geval werd het veroorzaakt bij het reproduceren van video’s met een slechte codering (te veel geheugen vereist).
Ditheeft me geholpen de fout op te sporen en een andere versie van dezelfde video aan te vragen.
https://stackoverflow.com/a/11986400/2508527


Antwoord 14, autoriteit 2%

In mijn geval treden deze twee problemen in sommige gevallen op, bijvoorbeeld wanneer ik probeer het voortgangsvenster weer te geven in een activiteit die niet op de voorgrond staat. Dus sluit ik het voortgangsdialoogvenster in onPausevan de levenscyclus van de activiteit. En het probleem is opgelost.

Kan deze animator niet starten op een vrijstaande weergave! onthullen effect BUG

ANTWOORD:Kan deze animator niet starten op een vrijstaande weergave! onthullingseffect

Waarom krijg ik de foutmelding ‘Kanaal is onherstelbaar kapot en wordt verwijderd!

ANTWOORD:Waarom krijg ik een foutmelding ‘Kanaal is onherstelbaar kapot en wordt verwijderd!’

@Override
protected void onPause() {
    super.onPause();
    dismissProgressDialog();
}
private void dismissProgressDialog() {
    if(progressDialog != null && progressDialog.isShowing())
        progressDialog.dismiss();
}

Antwoord 15, autoriteit 2%

Ik had dit probleem en de oorzaak was eigenlijk een NullPointerException. Maar het werd mij niet als één geheel gepresenteerd!

mijn uitvoer:
scherm bleef heel lang hangen en ANR

Mijn staat:
het lay-out xml-bestand was opgenomen in een andere lay-out, maar verwees naar de opgenomen weergave zonder id op te geven in de bijgevoegde lay-out. (ik had nog twee vergelijkbare implementaties van dezelfde onderliggende weergave, dus de resource-ID is gemaakt met de opgegeven naam)

Opmerking: het was een aangepaste dialoogvensterlay-out, dus eerst de dialoogvensters controleren kan een beetje helpen

Conclusie:
Er is een geheugenlek opgetreden bij het zoeken naar de id van de onderliggende weergave.


Antwoord 16, autoriteit 2%

Deze fout is opgetreden in het geval van een geheugenlek. Bijvoorbeeld als je een statische context hebt van een Android-component (Activiteit/service/etc) en deze wordt door het systeem gedood.

Voorbeeld:bedieningselementen van de muziekspeler in het systeemvak. Gebruik een voorgrondservice en stel acties in het meldingskanaal in via PendingIntent zoals hieronder.

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);

En als dit meldingskanaal abrupt wordt verbroken (misschien door het systeem, zoals in Xiomi-apparaten wanneer we de achtergrond-apps opschonen), wordt deze fout door geheugenlekken veroorzaakt door het systeem.


Antwoord 17, autoriteit 2%

Bij mij werd het veroorzaakt door een te groot splashscreen-beeld (meer dan 4000×2000). Het probleem verdween na het verkleinen van de afmetingen.


Antwoord 18, autoriteit 2%

Probeer de IDE-cache ongeldig te maken en opnieuw op te starten. Dit zal het probleem niet oplossen. Maar in mijn geval onthulde dit de mogelijke crash


Antwoord 19, autoriteit 2%

Controleer uw Realm-entiteitsklasse.

Als u variabele declareert als lateinit varen
je probeert die niet-geïnitialiseerde variabele te controleren met isNullOrEmpty()return “Kanaal is onherstelbaar verbroken en wordt verwijderd!”


Antwoord 20

In mijn geval gebruikte ik de Glide-bibliotheek en de afbeelding die eraan werd doorgegeven, was nul. Dus het gooide deze fout. Ik plaats een vinkje als volgt:

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

En het werkte prima. Ik hoop dat dit iemand helpt.


Antwoord 21

Ik kreeg hetzelfde logcat-bericht, realiseer je dat string.xml-waarde van array geen getal/cijfer kan zijn, maar alleen tekst/alfabet is toegestaan.


Antwoord 22

In mijn geval
deze fout treedt op omdat deze niet is verbonden met firebase firestore maar dezelfde gebruikt.

Om het probleem op te lossen, gaat u naar Tools-> Firebase

wanneer een venster wordt geopend op RHS, kiest u de opties om
-> Verbind uw app met Firebase
-> Voeg Cloud Firestore toe aan uw app


Antwoord 23

Controleer je ViewModel-klasse en vind geen enkel probleem en probeer vervolgens de code te becommentariëren waar je launch of withContext gebruikt.

In mijn geval heb ik commentaar gegeven op code waarbij ik launch of withContext gebruik en het werkte, mijn app werkt normaal.


Antwoord 24

Ik had een soort probleem dat je beschrijft. In mijn geval gebeurde het alleen in release-builds. Het werd veroorzaakt door de verduistering: native methoden crashten stil op FindClass of GetMethodID-aanroep omdat de namen versluierd waren. Proguard-regels bewerken gelukt!


Antwoord 25

Het probleem voor mij was dat ik de instantie van een activiteit niet heb gedefinieerd.

Bijvoorbeeld:

Mijn klas mijn;

onCreate() {

mijn.getData();
}

In plaats van:

Mijn klas mijn;

onCreate() {

mijn = nieuwe Mijnklasse();
mijn.getData();
}

Dit is raar aangezien Studio een goed definiërende foutmelding moet geven.

Other episodes