android 第二次打开场景闪退

0 投票
使用产品:supermap-imobile-9.1.1-168-android

问题描述:将官方文档中的飞行管理(FlyMannger)demo导入成一个module,添加一个入口主界面。

第一次进入FlyMannger的MainActivity,三维场景可正常加载。

点击back回到入口主界面,第二次进入FlyMannger的MainActivity时,发生闪退。

APP销毁过,重新进入则没有问题。

问题总结:第二次打开Activity时,会发生闪退,必现。

                APP进程退出后,第一次打开activity时,正常

猜测可能与资源的销毁或回收有关

以下是报错日志

2019-05-08 11:13:47.547 22044-22044/com.example.po.myapplication332 V/AudioManager: playSoundEffect   effectType: 0
2019-05-08 11:13:47.556 22044-22105/com.example.po.myapplication332 W/hwaps: APS: null pointer in reset
2019-05-08 11:13:47.595 22044-22044/com.example.po.myapplication332 D/HwCust: Create obj success use class android.app.HwCustActivityImpl
2019-05-08 11:13:47.596 22044-22044/com.example.po.myapplication332 D/HwCust: Create obj success use class android.app.HwCustHwWallpaperManagerImpl
2019-05-08 11:13:47.598 22044-22044/com.example.po.myapplication332 V/ActivityThread: ActivityThread,callActivityOnCreate
2019-05-08 11:13:47.612 22044-22044/com.example.po.myapplication332 D/HwRTBlurUtils: check blur style for HwPhoneWindow, themeResId : 0x7f0f0007, context : com.supermap.flymanager.MainActivity@3a61a0c, Nhwext : 0, get Blur : disable with , null
2019-05-08 11:13:47.615 22044-22044/com.example.po.myapplication332 D/ActivityThread: add activity client record, r= ActivityRecord{e08b40d token=android.os.BinderProxy@194f13f {com.example.po.myapplication332/com.supermap.flymanager.MainActivity}} token= android.os.BinderProxy@194f13f
2019-05-08 11:13:47.620 22044-22105/com.example.po.myapplication332 D/OpenGLRenderer:   HWUI Binary is  enabled
2019-05-08 11:13:47.629 22044-22044/com.example.po.myapplication332 I/PressGestureDetector: onAttached begin
2019-05-08 11:13:47.630 22044-22044/com.example.po.myapplication332 I/PressGestureDetector: onAttached end
2019-05-08 11:13:47.632 22044-22330/com.example.po.myapplication332 I/PressGestureDetector: enabledInPad = false,isPcCastMode = false
2019-05-08 11:13:47.657 22044-22105/com.example.po.myapplication332 D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) returns 0x3000
2019-05-08 11:13:47.679 22044-22329/com.example.po.myapplication332 E/OGRE: OGRE EXCEPTION(2:InvalidParametersException): NativeWindowType with name '00000000' already exists in GLES2RenderSystem::_createRenderWindow at E:\AR\OGRE1.9_ES3\RenderSystems\GLES2\src\OgreGLES2RenderSystem.cpp (line 526)
2019-05-08 11:13:47.687 22044-22195/com.example.po.myapplication332 A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x4498 in tid 22195 (Thread-10)
2019-05-08 11:13:47.687 22044-22105/com.example.po.myapplication332 D/OpenGLRenderer:   HWUI Binary is  enabled
2019-05-08 11:13:47.730 22044-22044/com.example.po.myapplication332 W/InputMethodManager: startInputReason = 1
5月 8 分类:  580次浏览 | 用户: delete__ (3 分)

1个回答

0 投票
你好,这是由于你在返回到主界面,其实你的进程还在。第二次进去就会导致闪退。你可以在返回到主界面时将资源全部释放掉
5月 8 用户: 董懿鑫 名扬四海 (3,241 分)
你不需要把场景控件移除了啊,你在你返回的事件里面写scene.close;scene.dispose

大哥  我说的scene.dispose报错。。。。。。

onBackPressed和onDestroy都一样,加不加remove都一样,都是报错

而且不加scene.dispose,只有scene.close,还是有问题,还是有问题,还是有问题

我这边测试了dispose这个方法确实有问题,直接将场景关闭就可以了,这是scene也不会消耗资源了。在方法里面这样写:

scene.close();

scene.viewEntire();

scene.refresh();
我这边很尴尬 再次进入依然无法加载场景  我的是荣耀8全网通 emui8.0  应该和手机没关系吧?

每次出错的时候都有下面这句log

E/OGRE: OGRE EXCEPTION(2:InvalidParametersException): NativeWindowType with name '00000000' already exists in GLES2RenderSystem::_createRenderWindow at E:\AR\OGRE1.9_ES3\RenderSystems\GLES2\src\OgreGLES2RenderSystem.cpp (line 526)

你的demo可以重新加载场景么?  能否给我发一下371722487@qq.com
兄弟  总结了一下

1 场景界面要加singletask

2 退出的时候执行scene.close(); 不要销毁activity

3 后面进入activity会执行onNewIntent,在里面写第二次之后的加载场景的逻辑

目前就只能这么解决了~ 明天再试试动态加载场景。

你有其他的解决方案也可以分享给我~~
...