Cra sh на устройстве во время смены языка в кроссплатформенной игре cocos2d Js (в Android Platform) - PullRequest
2 голосов
/ 31 января 2020

Мы получаем cra * sh каждый раз, когда пользователь меняет язык устройства и если игра находится в фоновом режиме. мы используем cocos2dJs3.17.1 для создания наших игр. Кажется, это проблема фреймворка, потому что для тестирования этого сценария мы создали новый пустой проект и попробовали то же самое, он потерпел крах.

Шаги для создания cra sh:

  1. Открыть игра.
  2. Go для настройки устройства и изменения языка.
  3. Откройте фоновую игру (которая есть в фоновом режиме)
  4. Нажмите несколько кнопок в игре (у вас должно быть несколько кнопка, у которой есть некоторые сенсорные события)

игра взломает sh после нажатия любой кнопки.

Трассировка стека из adb logcat:

01-31 12:10:57.814  6212  6451 W cr_ChildProcessConn: onServiceDisconnected (crash or killed by oom): pid=6454
01-31 12:10:57.998  6212  6212 E chromium: [ERROR:aw_browser_terminator.cc(125)] Renderer process (6454) crash detected (code -1).
01-31 12:10:58.026  6212  6212 E chromium: [ERROR:aw_browser_terminator.cc(90)] Render process (6454) kill (OOM or update) wasn't handed by all associated webviews, killing application.
01-31 12:10:58.183  3544  3544 I Zygote  : Process 6212 exited due to signal (9)
01-31 12:10:58.201  3926  4301 I ActivityManager: Process com.x.x (pid 6212) has died: cch+1CAC (117,340)"

Любой Идея или решение, пожалуйста, поделитесь в этой теме.

1 Ответ

2 голосов
/ 20 февраля 2020

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

private final String TRIGGER_REBIRTH = "trigger_rebirth";

@Override
protected void onCreate(Bundle savedInstanceState) {
  if (savedInstanceState != null) {
     if (savedInstanceState.getBoolean(TRIGGER_REBIRTH, false)) {
        // Trigger app restart here
        // See Implementation - https://github.com/JakeWharton/ProcessPhoenix
        ProcessPhoenix.triggerRebirth(this, getIntent());
     }
  }
}

@Override
public void onSaveInstanceState(Bundle outState) {
  outState.putBoolean(TRIGGER_REBIRTH, true);
}

Также предотвращает использование движка Cocos2d-x JS cra sh, JS_AbortIfWrongThread, который происходит после перехода пользователя к приложению, которое было убито android во время в фоновом режиме.

...