在 cocos2dJs 跨平台游戏(在 Android 平台)中更改语言时设备崩溃
Crash on device during language change in cocos2dJs cross platform game (in Android Platform)
每当用户更改设备语言以及游戏在后台运行时,我们都会遇到崩溃。我们正在使用 cocos2dJs3.17.1 来构建我们的游戏。这似乎是框架问题,因为为了测试这个场景,我们创建了新的空白项目并尝试了同样的事情,它崩溃了。
产生崩溃的步骤:
- 打开游戏。
- 转到设备设置并更改语言。
- 打开后台游戏(在后台)
- 点击游戏中的一些按钮(你应该有一些按钮有一些触摸事件)
点击任何按钮游戏都会崩溃。
来自 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)"
任何想法或解决方案请在此线程中分享。
在这些情况下,最好手动重启应用程序。
您可以按如下方式稍微更改主要 activity:
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 引擎崩溃,JS_AbortIfWrongThread 发生在用户导航到在后台被 android 杀死的应用后。
每当用户更改设备语言以及游戏在后台运行时,我们都会遇到崩溃。我们正在使用 cocos2dJs3.17.1 来构建我们的游戏。这似乎是框架问题,因为为了测试这个场景,我们创建了新的空白项目并尝试了同样的事情,它崩溃了。
产生崩溃的步骤:
- 打开游戏。
- 转到设备设置并更改语言。
- 打开后台游戏(在后台)
- 点击游戏中的一些按钮(你应该有一些按钮有一些触摸事件)
点击任何按钮游戏都会崩溃。
来自 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)"
任何想法或解决方案请在此线程中分享。
在这些情况下,最好手动重启应用程序。 您可以按如下方式稍微更改主要 activity:
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 引擎崩溃,JS_AbortIfWrongThread 发生在用户导航到在后台被 android 杀死的应用后。