Android 三维图层打开后导致页面长时间无响应

0 投票

使用产品:iMobile 10i for Android

问题描述:代码和运行效果参见以下的截图。

设备信息:红米K20 Pro,Android 10

问题是参照你们官方Demo编写的,运行并点击‘Open’按钮之后,页面就卡死了,尝试多次等待时间超过5分钟之久,依然ANR。

每次有红色Log打印:

2020-11-03 11:42:03.791 7431-7536/com.tdzc.smkmap E/OGRE: OGRE EXCEPTION(2:InvalidParametersException): Compressed images must be consecutive, in the source format in GLES2TextureBuffer::upload at E:\AR\OGRE1.9_ES3\RenderSystems\GLES2\src\OgreGLES2HardwarePixelBuffer.cpp (line 656)
    
    --------- beginning of crash
2020-11-03 11:42:03.792 7431-7536/com.tdzc.smkmap A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 7536 (Thread-485), pid 7431 (com.tdzc.smkmap)
2020-11-03 11:42:05.497 7431-7431/com.tdzc.smkmap E/libEGL: eglMakeCurrentImpl:1040 error 3006 (EGL_BAD_CONTEXT)

代码截图:

11月 3, 2020 分类:  172次浏览 | 用户: Hiboboo 才疏学浅 (15 分)

1个回答

0 投票

您好,麻烦确认以下几个问题:
1.打开本地的三维场景会不会出现ANR现象
2.手机网络怎么样,下载速率如何
3.使用我们的示范服务会不会出现ANR:http://support.supermap.com.cn:8090/iserver/services/3D-CBD/rest/realspace
4.使用的iMobile for Android具体的版本号是多少

11月 3, 2020 用户: 董懿鑫 登峰造极 (7,347 分)
1,本地三维场景我没找到应该加载哪块数据?

2,手机网络正常下载速度保持在10M/s上下

3,使用你们示范服务,直接就打不开CBD场景

4,具体版本号是:iMobile 10i for Android,jar包版本号是:v1010
您下载的产品包中有个sampleData,里面有个CBD_Android数据,这个是本地的一个三维缓存,您可以把这个缓存数据拷贝到设备里面,去打开这个工作空间

你好,我找到本地资源且似乎是打开了,但再执行scene.open(name)的时候,程序崩溃了。

代码如下:

if (null == sceneControl) {
    sceneControl = new SceneControl(mContext, SceneType.ST_EARTH_SPHERICAL);
    layoutBinding.mapviewContainer.addView(sceneControl);
    sceneControl.sceneControlInitedComplete(s -> {
        WorkspaceConnectionInfo connectionInfo = new WorkspaceConnectionInfo();
        connectionInfo.setServer(String.format("%s/SampleData/CBD_android/CBD_android.sxwu", Environment.getExternalStorageDirectory().getAbsolutePath()));
        connectionInfo.setType(WorkspaceType.SXWU);
        Workspace workspace = new Workspace();
        if (workspace.open(connectionInfo)) {
            Scene scene = sceneControl.getScene();
            scene.setWorkspace(workspace);
            Scenes scenes = workspace.getScenes();
            String name = scenes.get(0);
            scene.open(name);
        }
    });
}

资源目录如图:

所有的jar包和.so文件全已放入工程中。

异常日志如下:

    --------- beginning of crash
2020-11-03 17:20:33.183 29168-29302/com.tdzc.smkmap E/AndroidRuntime: FATAL EXCEPTION: Thread-505
    Process: com.tdzc.smkmap, PID: 29168
    java.lang.UnsatisfiedLinkError: No implementation found for long com.supermap.realspace.Layer3DVectorNative.jni_GetFieldInfos(long) (tried Java_com_supermap_realspace_Layer3DVectorNative_jni_1GetFieldInfos and Java_com_supermap_realspace_Layer3DVectorNative_jni_1GetFieldInfos__J)
        at com.supermap.realspace.Layer3DVectorNative.jni_GetFieldInfos(Native Method)
        at com.supermap.realspace.Layer3D.<init>(Layer3D.java:45)
        at com.supermap.realspace.Layer3DOSGBFile.<init>(Layer3DOSGBFile.java:41)
        at com.supermap.realspace.Layer3D.createInstance(Layer3D.java:376)
        at com.supermap.realspace.Layer3Ds.resetLayer3DsArr(Layer3Ds.java:52)
        at com.supermap.realspace.Layer3Ds.<init>(Layer3Ds.java:36)
        at com.supermap.realspace.Layer3Ds.createInstance(Layer3Ds.java:127)
        at com.supermap.realspace.Scene.getLayers(Scene.java:275)
        at com.supermap.realspace.Scene.fromXML(Scene.java:452)
        at com.supermap.realspace.Scene$1.run(Scene.java:501)
        at android.os.Handler.handleCallback(Handler.java:914)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:224)
        at com.supermap.realspace.SceneControl$RenderThread.run(SceneControl.java:684)
您好,您把so库里面的AutoCAD.so删掉。
嗯,可以了,问题解决。

1,不会再出现ANR,而且响应速度很快。

2,没有再出现任何红色日志。

所以,AutoCAD.so文件是做什么的?这个在什么时候需要?
加载本地的数据源没问题,但加载在线的为什么还是不行呢?依然ANR?
AutoCAD.so主要是用于CAD相关功能的so库,和其他so库会有冲突,如果使用三维相关功能就需要把这个库删掉。您那边能否发一个公网的iserver三维服务呢,我这边验证一下您的服务,或者你那把数据发我,我这边发个服务试试
我们没有公网的iserver服务。直接用你们supermap的iserver服务也不行。
您那边用我们的示范数据CBD_Android数据在你们的iserver上发布一个三维服务,在移动端打开看会不会出现ANR现象,我这边验证是没有问题的
...