-
Creator 版本: 2.2.2 和 2.1.2
-
目标平台: android
-
重现方式:Google 后台crash记录
-
首个报错: Caused by java.lang.NullPointerException
Attempt to invoke virtual method ‘void org.cocos2dx.lib.Cocos2dxGLSurfaceView.queueEvent(java.lang.Runnable)’ on a null object reference
org.cocos2dx.lib.Cocos2dxActivity.runOnGLThread (Cocos2dxActivity.java:400)
org.cocos2dx.lib.Cocos2dxHelper.runOnGLThread (Cocos2dxHelper.java:180)
org.cocos2dx.lib.Cocos2dxAudioFocusManager.unregisterAudioFocusListener (Cocos2dxAudioFocusManager.java:118)
org.cocos2dx.lib.Cocos2dxActivity.onDestroy (Cocos2dxActivity.java:378)
org.cocos2dx.javascript.AppActivity.onDestroy (AppActivity.java:294)
android.app.Activity.performDestroy (Activity.java:7532)
- 之前哪个版本是正常的: 一直有这个bug
- 手机型号: Redmi 7A | Galaxy A10 等等 各种型号都有
- 重现概率: 较低
Google后台和firebase 后台一直报这个错,但是出现概率不高,我看了下出错的代码块:
static void unregisterAudioFocusListener(Context context) {
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int result = am.abandonAudioFocus(sAfChangeListener);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.d(TAG, "abandonAudioFocus succeed!");
} else {
Log.e(TAG, "abandonAudioFocus failed!");
}
Cocos2dxHelper.runOnGLThread(new Runnable() {
@Override
public void run() {
nativeOnAudioFocusChange(AUDIOFOCUS_GAIN); // <----------------------【出错代码行】----------------
}
});
}
主要就是这个nativeOnAudioFocusChange 报错,空指针错误,
然后我看了下对应的JNI文件JniImp.cpp,发现了如下代码:
/***********************************************************
* Cocos2dxAudioFocusManager native functions implementation.
***********************************************************/
JNIEXPORT void JNICALL JNI_AUDIO(nativeOnAudioFocusChange)(JNIEnv* env, jobject thiz, jint focusChange)
{
// cocos_audioengine_focus_change(focusChange);
}
} // end of extern “C”
那这个是不是本质就是个空函数?我是不是把
Cocos2dxHelper.runOnGLThread(new Runnable() {
@Override
public void run() {
nativeOnAudioFocusChange(AUDIOFOCUS_GAIN);
}
});
这个删掉就可以了?
但是这个出现概率比较低,如果run()里面传入个空方法是不应该会报错的吧?如果每个都报错肯定一堆错啊。
跪求引擎大佬指点。 谢谢。

