Почему я получаю ошибку? Канал невосстановимо сломан и будет утилизирован! "

Когда я пытаюсь запустить мою активность AndEngine, я получаю эту ошибку:

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

Приложение не разбивается, но есть черный экран, и устройство не реагирует на нажатие кнопок "назад" или "дома".

Кто-нибудь знает, в чем проблема?

Ответ 1

Одна из наиболее распространенных причин, по которым я вижу эту ошибку, - это когда я пытаюсь отобразить диалоговое окно предупреждения или диалог прогресса в действии, который не находится на переднем плане. Например, когда фоновый поток, отображающий диалоговое окно, работает в приостановленной активности.

Ответ 2

Я думаю, что у вас где-то есть утечка памяти. Вы можете найти советы, чтобы избежать утечки памяти здесь. Также вы можете узнать о инструментах для отслеживания здесь.

Ответ 3

Вы использовали другой поток пользовательского интерфейса? Вы не должны использовать более 1 потока пользовательского интерфейса и сделать его похожим на бутерброд. Это приведет к утечке памяти.

Я решил похожую проблему 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

для справки.

Я тайваньский, я рад ответить здесь еще раз.

Ответ 4

Вы можете просмотреть исходный код об этом выходе здесь:

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

Это заставляет заблокировать цикл...

Ответ 5

Я получил аналогичную ошибку (мое приложение падает) после того, как я переименовал что-то в файл strings.xml и забыл изменить другие файлы (файл ресурсов xml-предпочтений и java-код).

IDE (андроид-студия) не обнаружила никаких ошибок. Но после того, как я отремонтировал свои файлы xml и java-код, приложение работает нормально. Итак, возможно, есть небольшие ошибки в ваших xml файлах или константах.

Ответ 6

У меня была такая же проблема, но у меня была из-за утечки памяти базы данных Android. Я пропустил курсор. Поэтому устройство аварийно завершает работу, чтобы устранить утечку памяти. Если вы работаете с базой данных Android, проверьте, не пропустили ли вы курсор при извлечении из базы данных

Ответ 8

Это случилось и для меня во время игры с использованием and-engine. Он был исправлен после того, как я добавил код ниже к моему manifest.xml. Этот код должен быть добавлен к вашей основной деятельности.

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

Ответ 9

У меня была та же проблема. Шахта была связана с третьей банкой, но логарифг не заметил исключения, я решил обновить третью банку, надеюсь, что это поможет.

Ответ 10

В моем случае эти две проблемы возникают в некоторых случаях, например, когда я пытаюсь отобразить диалог прогресса в действии, который не находится на переднем плане. Итак, я отклоняю диалог прогресса в onPause жизненного цикла активности. И проблема решена.

Невозможно запустить этот аниматор на отдельном экране! выявить эффект BUG

ОТВЕТ: Невозможно запустить этот аниматор в отдельном окне! выявить эффект

Почему я получаю ошибку? Канал невосстановимо сломан и будет утилизирован!

ОТВЕТ: Почему я получаю ошибку? Канал невосстановимо сломан и будет утилизирован!

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

}

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

Ответ 11

У меня была та же проблема. Чтобы решить эту ошибку: Закройте его на эмуляторе, а затем запустите его с помощью Android Studio.

Ошибка при попытке перезапустить приложение, когда приложение уже запущено на эмуляторе.

В основном ошибка говорит: "У меня больше нет существующего канала и утилит уже установленное соединение", как вы снова запустили приложение из Android Studio.

Ответ 12

Прочитав все вклады, похоже, что много разных истоков показывают те же самые проблемы.

В моем случае, например, я получил эту проблему, как только я добавил

android:progressBackgroundTintMode="src_over"

к свойствам индикатора выполнения. Я думаю, что GUI-дизайнер ADT известен несколькими ошибками. Поэтому я предполагаю, что это один из них. Поэтому, если вы столкнулись с подобными проблемными симптомами (это просто не имеет смысла) после игры с настройкой графического интерфейса, просто попробуйте отменить то, что вы сделали, и отменить свои последние изменения в графическом интерфейсе.

Просто нажмите Ctrl + z с недавно измененным файлом на экране.

Или:

Инструмент управления версиями может быть полезен. Откройте панель управления версиями - выберите вкладку "Локальные изменения" и просмотрите недавно измененные (возможно, XML файлы).

Щелкните правой кнопкой мыши несколько наиболее подозрительных и нажмите "Показать Diff". Тогда просто угадайте, какая модифицированная строка может быть ответственна.

Удачи:)

Ответ 13

У меня была эта проблема, и причиной на самом деле было исключение NullPointerException. Но он не был представлен мне как один!

Мой вывод: экран застрял очень долго и ANR

Мое состояние: в XML файл макета был включен другой макет, но он ссылался на включенное представление без указания идентификатора в прикрепленном макете. (у меня было еще две аналогичные реализации одного и того же дочернего представления, поэтому идентификатор ресурса был создан с заданным именем)

Примечание. Это был макет пользовательского диалога, поэтому сначала проверка диалогов может помочь

Вывод: произошла утечка памяти при поиске идентификатора дочернего представления.

Ответ 14

Одна из причин, по которой я вижу эту ошибку, - мои старые серверные пакеты (node.js) слишком старые. Когда я обновил все мои пакеты, я решил свою проблему.

npm update **or** npm [email protected] --save

Ответ 15

Когда я сталкивался с этой ошибкой, где-то в вашем коде ваши funcs или библиотеки, которые использовали, работают в разных потоках, поэтому попробуйте вызвать весь код в одном потоке, это решило мою проблему.

Если вы вызываете методы в WebView из любого потока, кроме потока пользовательского интерфейса вашего приложения, это может привести к неожиданным результатам. Например, если ваше приложение использует несколько потоков, вы можете использовать метод runOnUiThread(), чтобы обеспечить выполнение кода в потоке пользовательского интерфейса:

Справочная ссылка Google