আমি কেন ত্রুটি পাচ্ছি 'চ্যানেলটি অনিবার্যভাবে ভেঙে গেছে এবং তা নিষ্পত্তি হবে!'


116

আমি যখন আমার AndEngine ক্রিয়াকলাপ চালু করার চেষ্টা করি তখন আমি এই ত্রুটিটি পাই:

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

অ্যাপ্লিকেশনটি ক্রাশ হয় না, তবে একটি কালো স্ক্রিন রয়েছে এবং ডিভাইসটি 'পিছনে' বা 'হোম' বোতাম টিপে প্রতিক্রিয়া জানায় না।

আপনারা কেউ কি জানেন সমস্যাটা কি?


আপনার দেওয়া তথ্য থেকে খুব বেশি অনুমান করা যায় না (দয়া করে আরও যোগ করুন)। তবে এটি সাহায্য করতে পারে: স্ট্যাকওভারফ্লো.com / প্রশ্নগুলি / 5551929 / ইনপুটডিস্প্যাচার-অরর মেমরি ফাঁসের জন্য পরীক্ষা করুন।
জং

11
কোনও অ্যাপ ক্র্যাশ হওয়ার পরে (বা জোর করে থামানো হয়েছিল) ত্রুটিটি দেখা যাচ্ছে। অ্যান্ড্রয়েডের যে অংশটি আপনার অ্যাপ্লিকেশনটিতে ইনপুট ইভেন্টগুলি (টাচস্ক্রিন প্রেসগুলি ইত্যাদি) ফরওয়ার্ড করেছে তা লক্ষ্য করেছে যে এটির লক্ষ্যমাত্রা আর নেই। এর আগে ঘটে যাওয়া একটি ত্রুটি দেখুন।
zapl

4
@ আঙ্কেল লেম, ব্রো এমনকি আমিও একই ইস্যুতে আটকে আছি। আমি ফোনটি রিবুট না করা পর্যন্ত কোনও অপারেশন করতে পারি না। আপনি কি কোন সমাধান পেয়েছেন? আমি এই ইস্যুতে বিরক্ত হয়েছি ..
কৃষ্ণমূর্তি

@ আঙ্কেল তাই আপনি কি সমাধান খুঁজে পেয়েছেন?
XueQing

উত্তর:


43

আমি যে ত্রুটিটি দেখছি তার মধ্যে সবচেয়ে সাধারণ কারণগুলির মধ্যে একটি হল যখন আমি পূর্বের অংশে নেই এমন কোনও ক্রিয়াকলাপে সতর্কতা ডায়ালগ বা অগ্রগতি ডায়ালগ প্রদর্শন করার চেষ্টা করছি। ডায়লগ বাক্স প্রদর্শন করে এমন কোনও পটভূমি থ্রেড যখন থামানো ক্রিয়াকলাপে চলছে Like


4
ডায়ালগটি অনপস এ নালায় সেট করুন এবং পটভূমির থ্রেডে ডায়ালগটি প্রদর্শন করার আগে নালটি পরীক্ষা করুন।
লু মর্দা 19

আমার ক্ষেত্রে আমি ত্রুটিটি পেয়েছি কারণ আমি অনারিউম (), অনস্টার্ট, অনস্টপ, অনপস, অনডাস্ট্রয় এবং অন লওমেমরি পদ্ধতিতে মন্তব্য করেছি। ইঙ্গিতটির জন্য আপনাকে ধন্যবাদ লাউ মোরদা!
মেরিওমি 1

13

আমার মনে হয় আপনার কোথাও স্মৃতি ফুটো হয়েছে। মেমরি ফাঁস এড়াতে আপনি টিপসগুলি এখানে পেতে পারেন । এছাড়াও আপনি এটি এখানে ট্র্যাক করার সরঞ্জাম সম্পর্কে শিখতে পারেন ।


6

আপনি অন্য ইউআই থ্রেড ব্যবহার করেছেন? আপনার 1 টির বেশি ইউআই থ্রেড ব্যবহার করা উচিত নয় এবং এটিকে স্যান্ডউইচের মতো দেখানো উচিত। এটি করার ফলে স্মৃতি ফাঁস হবে।

আমি 2 দিন আগে একটি অনুরূপ সমস্যা সমাধান করেছি ...

জিনিসগুলিকে সংক্ষিপ্ত রাখতে: মূল থ্রেডে একাধিক কাজ করার জন্য অনেকগুলি ইউআই থ্রেড থাকতে পারে, তবে যদি কোনও ইউআই থ্রেডযুক্ত একটি সাব-থ্রেড এটির ভিতরে থাকে তবে প্যারেন্ট থ্রেড ইতিমধ্যে শেষ হয়ে গেলেও ইউআই থ্রেডটি এখনও এটির কাজ শেষ করতে পারে না may কাজ, এর ফলে মেমরি ফাঁস হয়।

উদাহরণস্বরূপ ... খণ্ড এবং 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

আপনার রেফারেন্স জন্য।

আমি তাইওয়ানিজ, আরও একবার এখানে উত্তর দিতে পেরে আমি আনন্দিত।


5

আপনি এখানে এই আউটপুট সম্পর্কে উত্স কোড দেখতে পারেন :

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

এটি চক্র ভাঙ্গা লক কারণে ...


15
আপনি বিশদভাবে বলতে পারেন, চক্র ভাঙ্গা লক মানে কি?
জয়দেব

5

আমি কিছু পরিবর্তন করার পরে আমি একই রকম ত্রুটি পেয়েছি (আমার অ্যাপ্লিকেশন ক্র্যাশ হয়েছে) strings.xml কোনও পরিবর্তন করে অন্য ফাইলগুলি (একটি পছন্দসই এক্সএমএল রিসোর্স ফাইল এবং জাভা কোড) সংশোধন করতে ভুলে যাওয়ার )।

আইডিই (অ্যান্ড্রয়েড স্টুডিও) কোনও ত্রুটি দেখায় নি। তবে, আমি আমার এক্সএমএল ফাইল এবং জাভা কোডটি মেরামত করার পরে, অ্যাপ্লিকেশনটি ঠিক আছে। সুতরাং, আপনার এক্সএমএল ফাইল বা ধ্রুবকগুলিতে কিছু ছোট ভুল রয়েছে।


বোঝার জন্য খুব সাধারণীকরণ করা হয়েছে :)
নাগা

2

আমারও একই সমস্যা ছিল। আমার তৃতীয় জারের কারণে ছিল, কিন্তু লগক্যাটটি ব্যতিক্রমটি ধরেনি, আমি তৃতীয় জার আপডেট করে সমাধান করেছি, আশা করি এগুলি সাহায্য করবে।


2

আমি যেমন এই ত্রুটির মুখোমুখি হয়েছিলাম, কোথাও আপনার কোডে আপনার ফানকস বা লাইব্রেরিগুলি বিভিন্ন থ্রেডে চালিত হয়েছে, সুতরাং একই থ্রেডে সমস্ত কোডকে কল করার চেষ্টা করুন, এটি আমার সমস্যাটিকে স্থির করেছে।

আপনি যদি আপনার অ্যাপ্লিকেশনটির ইউআই থ্রেড বাদে অন্য থ্রেড থেকে ওয়েবভিউতে পদ্ধতিগুলি কল করেন তবে এটি অপ্রত্যাশিত ফলাফলের কারণ হতে পারে। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশন একাধিক থ্রেড ব্যবহার করে তবে আপনার কোডটি ইউআই থ্রেডে চালিত হয়েছে তা নিশ্চিত করতে আপনি রানঅনউইথ্রেড () পদ্ধতিটি ব্যবহার করতে পারেন:

গুগল রেফারেন্স লিংক


1

আমার একই সমস্যা ছিল কিন্তু আমার একটি অ্যান্ড্রয়েড ডাটাবেস মেমরি ফাঁসের কারণে হয়েছিল। আমি একটি কার্সার এড়িয়ে গেলাম। সুতরাং ডিভাইসটি ক্র্যাশ করে যাতে সেই মেমরি ফাঁস ঠিক করতে পারে। আপনি যদি অ্যান্ড্রয়েড ডাটাবেসের সাথে কাজ করছেন তবে ডাটাবেস থেকে পুনরুদ্ধার করার সময় আপনি যদি কোনও কার্সার এড়িয়ে গেছেন কিনা তা পরীক্ষা করে দেখুন


আমি সেই অ্যাপটিতে কোনও ডেটাবেস ব্যবহার করি নি। আমার কাছে দেখে মনে হচ্ছে যে প্রচুর বিকল্প রয়েছে যা সেই ত্রুটির কারণ হতে পারে।
চাচা লেম

1

ইঞ্জিন এবং ইঞ্জিন ব্যবহার করে একটি গেম চালানোর সময় এটি আমার জন্যও হয়েছিল। আমি আমার প্রকাশ্য। এক্সএমএলে নীচের কোডটি যুক্ত করার পরে এটি ঠিক করা হয়েছিল। এই কোডটি আপনার মূল কার্যক্ষমতায় যুক্ত করা উচিত।

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

1

আমারও একই সমস্যা ছিল। ত্রুটি সমাধানের জন্য: এটি এমুলেটরটিতে বন্ধ করুন এবং তারপরে এন্ড্রয়েড স্টুডিও ব্যবহার করে এটি চালান।

অ্যাপ্লিকেশনটি ইতিমধ্যে এমুলেটরটিতে চলছে যখন আপনি অ্যাপটি পুনরায় চালানোর চেষ্টা করবেন ত্রুটি ঘটে।

মূলত ত্রুটিটি বলে - "আমার আর বিদ্যমান চ্যানেল নেই এবং ইতিমধ্যে প্রতিষ্ঠিত সংযোগটি নিষ্পত্তি করছি" যেমন আপনি আবার অ্যান্ড্রয়েড স্টুডিও থেকে অ্যাপটি চালিয়েছেন।


জিনমোশন এমুলেটর বন্ধ আছে। এমুলেটরটি আবার খুলেছে an এবার কোনও অ্যাপ ক্র্যাশ হচ্ছে না :)
এমিলি আলেকজান্দ্রা কনরোয়েড

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

আমার এই সমস্যাটি ছিল এবং কারণটি আসলে নুলপয়েন্টার এক্সসেপশন। তবে এটি আমার মতো উপস্থাপন করা হয়নি!

আমার আউটপুট: স্ক্রিনটি খুব দীর্ঘ সময়ের জন্য এবং এএনআর আটকে ছিল

আমার রাজ্য: লেআউট এক্সএমএল ফাইলটিকে অন্য একটি লেআউট অন্তর্ভুক্ত করা হয়েছিল তবে সংযুক্ত বিন্যাসে আইডি না দিয়ে অন্তর্ভুক্ত ভিউটি উল্লেখ করা হয়েছে। (একই শিশু দর্শনের জন্য আমার আরও দুটি অনুরূপ বাস্তবায়ন ছিল, সুতরাং প্রদত্ত নামটি দিয়ে উত্স আইডি তৈরি করা হয়েছিল)

দ্রষ্টব্য: এটি একটি কাস্টম ডায়ালগ বিন্যাস ছিল, তাই প্রথমে ডায়ালগগুলি পরীক্ষা করা কিছুটা সহায়তা করতে পারে

উপসংহার: সন্তানের দৃশ্যের আইডি অনুসন্ধান করার সময় কিছু মেমরি ফাঁস হয়েছে।


1

মেমরি ফাঁস হওয়ার ক্ষেত্রে এই ত্রুটিটি ঘটেছে। উদাহরণস্বরূপ, যদি আপনার কাছে কোনও অ্যান্ড্রয়েড উপাদান (ক্রিয়াকলাপ / পরিষেবা / ইত্যাদি) সম্পর্কিত কোনও স্থির প্রসঙ্গ থাকে এবং এটি সিস্টেম দ্বারা মারা যায়।

উদাহরণ: নোটিফিকেশন এরিয়ায় সংগীত প্লেয়ার নিয়ন্ত্রণ করে। অগ্রভাগের পরিষেবাটি ব্যবহার করুন এবং নীচের মতো মুলতুবিকরণের মাধ্যমে বিজ্ঞপ্তি চ্যানেলে ক্রিয়া সেট করুন।

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

এবং যদি এই বিজ্ঞপ্তি চ্যানেলটি আকস্মিকভাবে ভেঙে যায় (সিস্টেমের দ্বারা হতে পারে, আমরা যখন ব্যাকগ্রাউন্ড অ্যাপ্লিকেশনগুলি পরিষ্কার করি তখন জিমি ডিভাইসগুলির মতো), তবে মেমরি ফাঁস হওয়ার কারণে সিস্টেম দ্বারা ত্রুটি ছুঁড়ে দেওয়া হয়।


4
হাই, আমি মনে করি এটি আমার সমস্যা হতে পারে। আমি যখনই আমার মিডিয়া প্লেয়ারটি বন্ধ করি তখনই আমি এই ত্রুটিটি দেখছি। আমি মনে করি যে আমি সবকিছু সঠিকভাবে পরিষ্কার করেছি, আমি বিজ্ঞপ্তিটি, নিবন্ধিত রিসিভারগুলি গোপন করি But তবে যাই হোক আমি এই বার্তাটি পাই। অ্যাপ্লিকেশন আচরণ এটি দ্বারা প্রভাবিত হয় না, তবে আমি যাইহোক এটি ঠিক করতে চাই। এড়াতে আমার কী করা উচিত?
জেচি

@ জেসিএইচ কিছু পেয়েছে?
বৈভব

1

আমার জন্য এটি একটি স্প্ল্যাশ স্ক্রিন চিত্রের কারণে ঘটেছিল যা খুব বড় (4000x2000 এর বেশি) was সমস্যাটি এর মাত্রা হ্রাস করার পরে অদৃশ্য হয়ে গেল।


0

সমস্ত অবদানের পড়া, দেখে মনে হচ্ছে অনেকগুলি ভিন্ন উত্সের প্রদর্শন একই সমস্যাটির লক্ষণগুলির কারণ হয়।

উদাহরণস্বরূপ আমার ক্ষেত্রে - আমি যুক্ত করার সাথে সাথে এই সমস্যাটি পেয়েছি

android:progressBackgroundTintMode="src_over"

আমার অগ্রগতি বার বৈশিষ্ট্য। আমি মনে করি ADT এর GUI ডিজাইনার বেশ কয়েকটি বাগের জন্য পরিচিত। তাই আমি ধরে নিই এটি তাদের মধ্যে একটি। আপনার জিইউআই সেটআপটি খেলার পরে যদি আপনি অনুরূপ সমস্যার লক্ষণগুলির (তবে এটি বোঝার কোনও অর্থ হয় না) মুখোমুখি হন তবে আপনি যা করেছেন তা আবার রোল করার চেষ্টা করুন এবং আপনার শেষ জিইআইআই পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনুন।

স্ক্রিনে সম্প্রতি পরিবর্তিত ফাইলের সাথে কেবল Ctrl + z টিপুন।

বা:

সংস্করণ নিয়ন্ত্রণ সরঞ্জাম সহায়ক হতে পারে। সংস্করণ নিয়ন্ত্রণ প্যানেলটি খুলুন - স্থানীয় পরিবর্তন ট্যাবটি চয়ন করুন এবং সম্প্রতি সংশোধিত (সম্ভবত .xML) ফাইলগুলি দেখুন।

কিছু সন্দেহজনক একটিকে ডান ক্লিক করুন এবং প্রদর্শন ডিফ ক্লিক করুন। তাহলে কেবল অনুমান করুন যে কোন পরিবর্তিত রেখাই দায়ী হতে পারে।

শুভকামনা :)


0

আমার ক্ষেত্রে, আমি গ্লাইড গ্রন্থাগার ব্যবহার করছিলাম এবং এতে দেওয়া চিত্রটি শূন্য ছিল। সুতরাং এটি এই ত্রুটি ছুড়েছিল। আমি এই মত একটি চেক লাগিয়েছি:

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

এবং এটা ভাল কাজ করে। আশা করি এটি কাউকে সাহায্য করবে।


0

আমি একই লগক্যাট বার্তা পেয়েছি, কেবল বুঝতে পারি যে অ্যারের স্ট্রিং.এক্সএমএল মান সংখ্যা / সংখ্যা হতে পারে না, তবে কেবল পাঠ্য / বর্ণমালা অনুমোদিত।


0

আমার ক্ষেত্রে এই ত্রুটিটি ফায়ারবেস ফায়ার স্টোরের সাথে সংযুক্ত না হয়ে একই ব্যবহার করার কারণে ঘটছে।

সমস্যাটি সংশোধন করতে দয়া করে সরঞ্জাম-> ফায়ারবেসে যান

আরএইচএসে যখন একটি উইন্ডো খুলবে তখন বিকল্পগুলি চয়ন করুন -> আপনার অ্যাপ্লিকেশনটিকে ফায়ারবেসে সংযুক্ত করুন -> আপনার অ্যাপ্লিকেশনটিতে ক্লাউড ফায়ারস্টোর যুক্ত করুন


0

এটি অনেকগুলি সমস্যার কারণে এই লতানো স্পষ্ট। আমার জন্য, আমি বেশ কয়েকটি ওয়ানটাইম ওয়ার্কআরকোয়েস্ট পোস্ট করছিলাম, প্রত্যেকটিই একক ঘরের ডাটাবেসে অ্যাক্সেস করছিল এবং একক টেবিলের মধ্যে সন্নিবেশ করছিল।

ডিএও ফাংশন স্থগিত করা এবং কর্মীর কর্টিন স্কোপের মধ্যে তাদের কল করা আমার জন্য এটি স্থির করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.