Android приложение неожиданно завершает работу с сообщением «Потребитель закрыл входной канал или произошла ошибка». - Что это значит? - PullRequest
0 голосов
/ 12 июля 2020

Мое приложение неожиданно завершает работу.

Это особенно трудно понять, потому что нет очевидных ошибок sh, ошибок или чего-либо, вызывающего проблему.

Вот лог-код, который я видя:

  ...
  [07-11 20:52:15.706 21105:21517 D/TGLOG]
  Thread exit from signal 12
  ...
  [07-11 20:52:15.924 4725:4888 W/InputDispatcher]
  channel '81fe60d com.templegatesgames.RollAndroid/com.TGActivity.TGActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9, fd=645
  [07-11 20:52:15.924 4725:4888 E/InputDispatcher]
  channel '81fe60d com.templegatesgames.RollAndroid/com.TGActivity.TGActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
  ...
  [07-11 20:52:15.933 4725:7850 I/WindowManager]
  WIN DEATH: Window{81fe60d u0 com.templegatesgames.RollAndroid/com.TGActivity.TGActivity}
  ...

(Нет других сообщений от нашего приложения или чего-то вроде бы важного в разделах ...)

На самом деле непонятно, что "Потребитель закрыл ..." "сообщение означает, что поиск по inte rnet и переполнению стека дает довольно непоследовательные / непоследовательные ответы. Любая информация здесь может помочь.

Это происходит только на Android 10 (этот же код отлично работает на <10, а также на iOS) </p>

Мы звоним:

  pthread_kill(*thread, SIGUSR2);

Где SIGUSR2 зарегистрирован через:

  signal(SIGUSR2, ThreadExitCallbackHandler);

С обратным вызовом:

  void ThreadExitCallbackHandler(int signum)
  {
    XTraceAndLog("Thread exit from signal %d", signum);
    pthread_exit(NULL);
  }

Это происходит в довольно сложный момент в приложении для настольных игр, когда мы выходим из игры и уничтожить игровой поток. (Игровой поток выполняет logi c игры линейным образом. Это длительный поток, похожий на сопрограмму, нет никакого подобного цикла или опроса, чтобы он вышел на «вершине стека» или что-то еще). Мы сделали это с другими нашими приложениями для настольных игр без проблем. В этой игре нет очевидных отличий, но очевидно, что что-то другое, но неясно, с чего даже начать поиск.

Любые идеи даже о том, с чего начать поиск, были бы полезны.

...