cocos2dx 游戏切后台闪退

说明:非必现,但能重现,切个几十次就有可能出现

堆栈信息如下:

Crash reason: SIGSEGV
Crash address: 0x0
libgame.so + Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeOnPause at Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp:43
data@app@com.qdazzle.linghunqiyue.mi-1.apk@classes.dex + 0x9d01a
libdvm.so + 0x1e54e
dalvik-heap (deleted) + 0xe19d6
dalvik-heap (deleted) + 0xe241e
libdvm.so + 0x4f9b7
data@app@com.qdazzle.linghunqiyue.mi-1.apk@classes.dex + 0xea632
libgame.so + Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender at Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp:40
libc.so + 0xe21a
libdvm.so + 0x51a29
libdvm.so + 0xbd8a6
libdvm.so + 0xa62a5
libdvm.so + 0x9cd66
dalvik-LinearAlloc (deleted) + 0x3c573a
data@app@com.qdazzle.linghunqiyue.mi-1.apk@classes.dex + 0xbd72
libdvm.so + 0x91ccd
dalvik-LinearAlloc (deleted) + 0x3c5726
data@app@com.qdazzle.linghunqiyue.mi-1.apk@classes.dex + 0xf4746
libdvm.so + 0x6f03f
data@app@com.qdazzle.linghunqiyue.mi-1.apk@classes.dex + 0x23b76
dalvik-aux-structure (deleted) + 0xfffffffe
libdvm.so + 0x5192f
libdvm.so + 0xb8c66
libdvm.so + 0x4f7cf
libdvm.so + 0x517e3
data@app@com.qdazzle.linghunqiyue.mi-1.apk@classes.dex + 0x9f902
libdvm.so + 0x1e6be
libdvm.so + 0x2792a
libdvm.so + 0x2eeba
libdvm.so + 0x2ee6a
libdvm.so + 0x2c39e
dalvik-LinearAlloc (deleted) + 0x3c4f5e
system@framework@framework.jar@classes.dex + 0x6bdde5
libdvm.so + 0x62eef
libdvm.so + 0x57437
libdvm.so + 0x72d39
libdvm.so + 0x9b7ca
libdvm.so + 0xbdbc6
libc.so + 0x652fa
libdvm.so + 0x62f13
libdvm.so + 0x57517
libc.so + 0xd652

日记信息如下:
06-13 17:49:13.744 D/libc-netbsd(18146): getaddrinfo: s.jpush.cn get result from proxy >>
06-13 17:49:13.758 E/mylog (18178): Miapp oncreate
06-13 17:49:13.801 E/ (18146): appName=com.qdazzle.linghunqiyue.mi, acAppName=/system/bin/surfaceflinger
06-13 17:49:13.801 E/ (18146): 0
06-13 17:49:13.821 E/ (18146): appName=com.qdazzle.linghunqiyue.mi, acAppName=/system/bin/surfaceflinger
06-13 17:49:13.821 E/ (18146): 0
06-13 17:49:14.432 E/MediaPlayer(18146): Should have subtitle controller already set
06-13 17:49:14.434 E/MediaPlayer(18146): Should have subtitle controller already set
06-13 17:49:14.548 D/libc-netbsd(18146): getaddrinfo: apm-collector.qtestin.com get result from proxy >>
06-13 17:49:15.005 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:19.410 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:36.204 E/mylog (18146): runOnGLThread run
06-13 17:49:37.101 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:39.031 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:39.888 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:40.829 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:41.587 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:44.000 E/MediaPlayer(18146): Should have subtitle controller already set
06-13 17:49:44.003 E/MediaPlayer(18146): Should have subtitle controller already set
06-13 17:49:44.102 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:45.070 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:45.929 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:46.769 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:48.007 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:49.308 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:50.129 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:51.171 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:52.128 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:53.236 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:54.029 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:55.090 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:55.830 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:56.435 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:57.048 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:57.929 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:49:58.649 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:51:33.648 D/libc-netbsd(18146): getaddrinfo: stats.jpush.cn get result from proxy >>
06-13 17:53:38.654 D/libc-netbsd(18146): getaddrinfo: stats.jpush.cn get result from proxy >>
06-13 17:54:56.246 D/libc-netbsd(18146): getaddrinfo: stats.jpush.cn get result from proxy >>
06-13 17:54:56.867 D/libc-netbsd(18146): getaddrinfo: s1.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:04.187 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:11.873 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:12.810 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:17.114 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:18.388 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:19.265 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:20.046 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:20.825 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:22.171 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:23.045 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:24.148 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:25.289 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:26.809 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:28.129 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:29.230 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:31.068 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:31.908 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:32.732 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:33.528 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:34.350 D/libc-netbsd(18146): getaddrinfo: s27.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:35.747 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:55:36.371 D/libc-netbsd(18146): getaddrinfo: manager.mixed.fshx.q-dazzle.com get result from proxy >>
06-13 17:56:10.455 E/mylog (19295): Miapp oncreate
06-13 17:56:10.884 E/ (19295): appName=com.qdazzle.linghunqiyue.mi, acAppName=/system/bin/surfaceflinger
06-13 17:56:10.884 E/ (19295): 0

之前有个帖子说是 JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeOnPause() {
if (CCDirector::sharedDirector()->getOpenGLView()) {
CCApplication::sharedApplication()->applicationDidEnterBackground();
CCLOGINFO("addgetOpenGLViewnullpinter ");
CCNotificationCenter::sharedNotificationCenter()->postNotification(EVENT_COME_TO_BACKGROUND, NULL);
}
}

JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeOnResume() {
    if (CCDirector::sharedDirector()->getOpenGLView()) {
        CCApplication::sharedApplication()->applicationWillEnterForeground();
    }
}

Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeOnPause() {
if (CCDirector::sharedDirector()->getOpenGLView()) {--------加这行判断,防止空指针出现,但是加了之后任然会有闪退。 有没有谁遇到过。。。。

http://www.cocoachina.com/bbs/read.php?tid-234889.html 这个贴 是同样的问题 但是贴主没说清楚最后是怎么解决的

你看看是不是用了 通知中心,然后没有 REMOVE掉。我之前因为这个问题 切后台闪退,也是偶尔出现。

我的是在CCRenderTexture::CCRenderTexture()的构造方法中添加了个观察者观察 EVENT_COME_TO_BACKGROUND事件,并绑定了个触发方法CCRenderTexture::listenToBackground()这个方法什么没有做;然后在CCRenderTexture::~CCRenderTexture()析构里移除了这个个观察者。 请问您说的要remove是指?

就是在 析构函数里 移除这个 观察。你已经移除了 那就不是这个原因。