मैं क्यों त्रुटि प्राप्त कर रहा हूं 'चैनल अपरिचित रूप से टूटा हुआ है और इसे निपटाया जाएगा!'


104

जब मैं अपनी एंडग्विन एक्टिविटी लॉन्च करने की कोशिश करता हूं , मुझे यह त्रुटि मिलती है:

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

एप्लिकेशन क्रैश नहीं करता है, लेकिन एक काली स्क्रीन है और डिवाइस 'बैक' या 'होम' बटन दबाने पर प्रतिक्रिया नहीं करता है।

क्या कोई जानता है कि परेशानी क्या है?


आपके द्वारा दी गई जानकारी से बहुत कुछ अनुमान नहीं लगाया जा सकता है (कृपया अधिक जोड़ें)। लेकिन यह मदद कर सकता है: stackoverflow.com/questions/5551929/inputdispatcher-error स्मृति लीक के लिए जाँच करें।
जोंग

10
किसी ऐप के क्रैश होने (या बल-रुकने के बाद) में वह त्रुटि दिखाई देती है। एंड्रॉइड का वह भाग जो आपके ऐप में इनपुट ईवेंट (टचस्क्रीन प्रेस आदि) को आगे बढ़ाता है, ने ध्यान दिया कि यह लक्ष्य नहीं रह गया है। उस एक से पहले होने वाली त्रुटि को देखें।
जपं

1
@ चाचा लेम, भाई मैं भी इसी मुद्दे में फंस गया हूं। जब तक मैं फोन को रिबूट नहीं करता, तब तक मैं कोई भी ऑपरेशन नहीं कर सकता। क्या आपको कोई समाधान मिला? मैं इस मुद्दे से तंग आ गया हूँ ..
कृष्णमूर्ति

जवाबों:


39

सबसे आम कारणों में से एक है कि मैं उस त्रुटि को देखता हूं, जब मैं एक गतिविधि में चेतावनी संवाद या प्रगति संवाद प्रदर्शित करने की कोशिश कर रहा हूं जो अग्रभूमि में नहीं है। जैसे कि जब एक डायलॉग बॉक्स प्रदर्शित करने वाला बैकग्राउंड थ्रेड रुकी हुई गतिविधि में चल रहा होता है।


2
डायलॉग को ऑनपॉइंट में नल करने के लिए सेट करें, और बैकग्राउंड थ्रेड में डायलॉग दिखाने से पहले नल के लिए जाँच करें।
लो मोर्डा

मेरे मामले में मुझे त्रुटि मिली क्योंकि मैंने onResume (), onStart, onStop, onPause, onDestroy और onLowMemory विधियों पर टिप्पणी की। संकेत के लिए @LouMorda धन्यवाद!
मेरीओमी 1

13

मुझे लगता है कि आपके पास मेमोरी लीक कहीं न कहीं है। आप यहां लीक मेमोरी से बचने के लिए टिप्स पा सकते हैं । इसके अलावा आप यहाँ नीचे ट्रैक करने के लिए उपकरणों के बारे में जान सकते हैं ।


9

क्या आपने एक और UI थ्रेड का उपयोग किया है? आपको 1 से अधिक UI थ्रेड का उपयोग नहीं करना चाहिए और इसे सैंडविच की तरह बनाना चाहिए। ऐसा करने से मेमोरी लीक हो जाएगी।

मैंने 2 दिन पहले एक ऐसे ही मुद्दे को हल किया है ...

चीजों को छोटा रखने के लिए: मुख्य धागे में कई कार्य करने के लिए कई यूआई थ्रेड हो सकते हैं, लेकिन अगर यूआई थ्रेड वाला एक उप-धागा इसके अंदर है, तो यूआई थ्रेड ने अपना काम अभी तक पूरा नहीं किया है, जबकि यह माता-पिता का धागा पहले ही समाप्त कर चुका है काम, यह स्मृति लीक का कारण बनता है।

उदाहरण के लिए ... Fragment & UI एप्लिकेशन के लिए ... यह मेमोरी लीक का कारण बनेगा।

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

मेरा समाधान नीचे के रूप में पुनर्व्यवस्थित है:

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

आपके संदर्भ के लिए।

मैं ताइवान का हूं, मुझे यहां एक बार फिर जवाब देने में खुशी हो रही है।


6

आप इस आउटपुट के बारे में सोर्स कोड यहाँ देख सकते हैं :

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

यह चक्र टूटे हुए ताले के कारण होता है ...


13
क्या आप विस्तार से बता सकते हैं कि चक्र टूटे हुए लॉक का क्या मतलब है?
जयदेव

4

जब मैंने कुछ का नाम बदला strings.xmlऔर अन्य फ़ाइलों (एक प्राथमिकता xml संसाधन फ़ाइल और जावा कोड) को संशोधित करना भूल गया, तो मुझे भी ऐसी ही त्रुटि (मेरा ऐप क्रैश) मिला ।

आईडीई (एंड्रॉइड स्टूडियो) ने कोई त्रुटि नहीं दिखाई। लेकिन, जब मैंने अपनी xml फ़ाइलों और जावा कोड की मरम्मत की, तो ऐप ठीक चला। तो, शायद आपकी xml फ़ाइलों या स्थिरांक में कुछ छोटी गलतियाँ हैं।


हालांकि सामान्य रूप से समझा जा रहा है :)
नागा

2

मुझे भी यही समस्या थी। मेरा एक तीसरे जार के कारण था, लेकिन लॉगकैट अपवाद को पकड़ नहीं पाया, मैंने तीसरे जार को अपडेट करके हल किया, आशा है कि ये मदद करेंगे।


2

जैसा कि मैंने इस त्रुटि का सामना किया, आपके कोड में आपके फ़न या लाइब्रेरी जो विभिन्न थ्रेड्स पर चलते थे, इसलिए सभी कोड को एक ही थ्रेड पर कॉल करने का प्रयास करें, इससे मेरी समस्या ठीक हो गई।

यदि आप अपने ऐप के UI थ्रेड के अलावा किसी भी थ्रेड से WebView पर विधियाँ कहते हैं, तो यह अप्रत्याशित परिणाम दे सकता है। उदाहरण के लिए, यदि आपका ऐप कई थ्रेड का उपयोग करता है, तो आप UI कोड पर अपने कोड को निष्पादित करने के लिए runOnUiThread () विधि का उपयोग कर सकते हैं:

Google संदर्भ लिंक


1

मैं एक ही समस्या थी, लेकिन मेरा एक Android डेटाबेस स्मृति रिसाव के कारण था। मैंने एक कर्सर छोड़ दिया। तो डिवाइस क्रैश हो जाता है ताकि मेमोरी रिसाव को ठीक किया जा सके। यदि आप एंड्रॉइड डेटाबेस चेक के साथ काम कर रहे हैं यदि आपने डेटाबेस से पुनर्प्राप्त करते समय कर्सर को छोड़ दिया है


मैंने उस ऐप में कोई डेटाबेस इस्तेमाल नहीं किया। मुझे लगता है कि विकल्पों में से एक बहुत कुछ है जो उस त्रुटि का कारण हो सकता है।
चाचा लेम

1

यह मेरे लिए खेल और इंजन का उपयोग करते हुए चला। यह मेरे मैनिफ़ेस्ट.xml में नीचे कोड जोड़ने के बाद तय किया गया था। इस कोड को आपकी मुख्यता में जोड़ा जाना चाहिए।

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

1

मुझे भी यही समस्या थी। त्रुटि को हल करने के लिए: इसे एमुलेटर पर बंद करें और फिर इसे एंड्रॉइड स्टूडियो का उपयोग करके चलाएं।

त्रुटि तब होती है जब आप ऐप को फिर से चलाने की कोशिश करते हैं जब ऐप पहले से ही एमुलेटर पर चल रहा होता है।

मूल रूप से त्रुटि कहती है - "मेरे पास मौजूदा चैनल नहीं है और पहले से स्थापित कनेक्शन को निपटाना है" जैसा कि आपने ऐप को फिर से एंड्रॉइड से चलाया है।


जीनोम्यूलेटर एमुलेटर को बंद कर दिया। एमुलेटर को फिर से खोला। इस समय कोई ऐप क्रैश नहीं हो रहा है :)
एमिली एलेक्जेंड्रा कॉनरॉइड

1

मुझे भी यही समस्या हो रही थी। मेरे मामले में खराब कॉडिफिकेशन (बहुत अधिक मेमोरी की मांग) वाले वीडियो को पुन: पेश करने की कोशिश करने के कारण हुआ था। इससे मुझे त्रुटि को पकड़ने और उसी वीडियो के दूसरे संस्करण का अनुरोध करने में मदद मिली। https://stackoverflow.com/a/11986400/2508527


1

मेरे मामले में ये दोनों मुद्दे कुछ मामलों में होते हैं, जैसे जब मैं प्रगति संवाद को एक ऐसी गतिविधि में प्रदर्शित करने की कोशिश कर रहा हूं जो अग्रभूमि में नहीं है। इसलिए, मैं गतिविधि जीवनचक्र के ऑनपॉइंट में प्रगति संवाद को खारिज करता हूं । और मसला हल हो गया।

इस एनीमेटर को एक अलग दृश्य पर शुरू नहीं किया जा सकता है! BUG प्रकट प्रभाव

उत्तर: इस एनीमेटर को एक अलग दृश्य पर शुरू नहीं किया जा सकता है! प्रभाव प्रकट करें

क्यों मैं त्रुटि प्राप्त कर रहा हूं 'चैनल अपरिचित रूप से टूटा हुआ है और इसका निपटान किया जाएगा!

उत्तर: मुझे त्रुटि क्यों हो रही है 'चैनल अपरिचित रूप से टूट गया है और उसका निस्तारण किया जाएगा!'

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

}

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

1

मेरे पास यह मुद्दा था और इसका कारण वास्तव में NullPointerException था। लेकिन यह मुझे एक के रूप में प्रस्तुत नहीं किया गया था!

मेरा आउटपुट: स्क्रीन बहुत लंबी अवधि और ANR के लिए अटकी हुई थी

मेरा राज्य: लेआउट xml फ़ाइल में एक और लेआउट शामिल था, लेकिन संलग्न लेआउट में आईडी दिए बिना इसमें शामिल दृश्य को संदर्भित किया गया था। (मेरे पास एक ही चाइल्ड व्यू के दो समान कार्यान्वयन हैं, इसलिए दिए गए नाम के साथ संसाधन आईडी बनाई गई)

नोट: यह एक कस्टम डायलॉग लेआउट था, इसलिए पहले डायलॉग की जाँच करने से थोड़ी मदद मिल सकती है

निष्कर्ष: चाइल्ड व्यू की आईडी सर्च करने पर कुछ मेमोरी लीक हुई है।


1

मेरे लिए यह एक स्पलैश स्क्रीन इमेज के कारण था जो बहुत बड़ा था (4000x2000 से अधिक)। समस्या अपने आयामों को कम करने के बाद गायब हो गई।


0

सभी योगदान के माध्यम से पढ़ना, ऐसा लगता है कि कई अलग-अलग मूल प्रदर्शन इसी समस्या के लक्षणों का कारण बनते हैं।

उदाहरण के लिए मेरे मामले में - जैसे ही मैंने जोड़ा मुझे यह समस्या हो गई

android:progressBackgroundTintMode="src_over"

मेरी प्रगति बार गुणों के लिए। मुझे लगता है कि ADT का GUI डिज़ाइनर कई बग के लिए जाना जाता है। इसलिए मुझे लगता है कि यह उनमें से एक है। इसलिए यदि आपके जीयूआई सेटअप के साथ खेलने के बाद आपको इसी तरह के समस्या के लक्षण मिलते हैं (तो इसका कोई मतलब नहीं है), बस आपने जो किया उसे वापस करने की कोशिश करें और अपने पिछले जीयूआई संशोधनों को पूर्ववत करें।

स्क्रीन पर हाल ही में संशोधित फ़ाइल के साथ बस Ctrl + z दबाएं।

या:

संस्करण नियंत्रण उपकरण सहायक हो सकता है। संस्करण नियंत्रण कक्ष खोलें - स्थानीय परिवर्तन टैब चुनें और हाल ही में संशोधित (शायद .xml) फाइलें देखें।

कुछ सबसे संदिग्ध पर राइट क्लिक करें और शो डिफ पर क्लिक करें। फिर बस अनुमान लगाएं कि कौन सी संशोधित रेखा जिम्मेदार हो सकती है।

सौभाग्य :)


0

यह त्रुटि स्मृति रिसाव के मामले में हुई। उदाहरण के लिए यदि आपके पास एंड्रॉइड घटक (गतिविधि / सेवा / आदि) का कोई स्थिर संदर्भ है और सिस्टम द्वारा मारा जाता है।

उदाहरण: अधिसूचना क्षेत्र में संगीत खिलाड़ी नियंत्रण। नीचे की तरह PendingIntent के माध्यम से एक अग्रभूमि सेवा का उपयोग करें और अधिसूचना चैनल में क्रियाएं सेट करें।

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

और अगर यह सूचना चैनल अचानक टूट जाता है (सिस्टम द्वारा हो सकता है, जैसे कि श्याओमी डिवाइस जब हम बैकग्राउंड ऐप्स को साफ करते हैं), तो मेमोरी लीक के कारण यह त्रुटि सिस्टम द्वारा फेंक दी जाती है।


नमस्ते, मुझे लगता है कि यह मेरी समस्या हो सकती है। जब भी मैं अपने मीडिया प्लेयर को बंद करता हूं, मुझे यह त्रुटि दिखाई देती है। मुझे लगता है कि मैं सब कुछ सही ढंग से साफ करता हूं, मैं अधिसूचना, अपंजीकृत रिसीवर आदि को छिपाता हूं, लेकिन मुझे यह संदेश वैसे भी मिलता है। एप्लिकेशन व्यवहार इससे प्रभावित नहीं है, लेकिन मैं इसे वैसे भी ठीक करना चाहूंगा। इससे बचने के लिए मुझे क्या करना चाहिए?
जेसीएच

0

मेरे मामले में, मैं ग्लाइड लाइब्रेरी का उपयोग कर रहा था और इसमें पारित छवि शून्य थी। इसलिए यह इस त्रुटि को फेंक रहा था। मैंने इस तरह एक चेक लगाया:

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

और यह ठीक काम किया। आशा है कि यह किसी की मदद करता है।


0

मुझे एक ही logcat संदेश मिला, बस एहसास है कि string.xml का मान सरणी संख्या / अंक नहीं हो सकता है, लेकिन केवल पाठ / वर्णमाला की अनुमति है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.