首页 / 浏览问题 / 移动GIS / 问题详情
android切换工作空间很慢、假死
122EXP 2020年12月10日

使用版本

SuperMap iMobile 10i(2020)

  • (V10.1.0)

代码如下 切换工作空间很慢,请问怎么能优化一下 我想加loading也会把loading卡住

WorkspaceConnectionInfo connectionInfo = new WorkspaceConnectionInfo();
File f = new File(filePath);
String fileName = f.getName();
String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);
if (prefix.compareToIgnoreCase("SMWU") == 0) {
    connectionInfo.setType(WorkspaceType.SMWU);
} else if (prefix.compareToIgnoreCase("SXWU") == 0) {
    connectionInfo.setType(WorkspaceType.SXWU);
}
connectionInfo.setServer(filePath);
if (m_workspace != null) {
    m_mapcontrol.getMap().close();
    m_workspace.close();
}
m_workspace.open(connectionInfo);
m_mapcontrol.getMap().setWorkspace(m_workspace);

1个回答

您好,在进行工作空间切换的时候先将工作空间关闭并释放workspace。再初始化一个新的工作空间worksapce来打开工作空间
9,197EXP 2020年12月11日

您说的意思是这样吗?

if (m_workspace != null) {
    m_mapcontrol.getMap().close();
    m_workspace.close();
    m_workspace.dispose();
}
m_workspace=new Workspace();
m_workspace.open(connectionInfo);
是的,这样判断一下,如果为空就实例化工作空间

设置后就报错了怎么解决?:FATAL EXCEPTION: main
                                                          Process: com.zzyc, PID: 15786
                                                          java.lang.IllegalStateException: setWorkspace()
                                                          在设置新的工作空间前不要释放旧的工作空间
                                                              at com.supermap.mapping.Map.setWorkspace(Map.java:1432)

我是这样写的:

if (m_workspace != null) {
    m_mapcontrol.getMap().close();
    m_workspace.close();
    m_workspace.dispose();
    m_workspace=null;
}
if (m_workspace==null){
    m_workspace=new Workspace();
    m_workspace.open(connectionInfo);
}

把工作空间关闭后重新打开新的工作空间不会出现卡顿的情况,代码参考如下:

if(m_workspace!=null){
    m_mapcontrol.getMap().close();
    m_workspace.close();
    Workspace m_workspace = new Workspace();
    WorkspaceConnectionInfo info = new WorkspaceConnectionInfo();
    info.setServer(rootPath+"/SuperMap/DYX/World.smwu");
    info.setType(WorkspaceType.SMWU);
    m_mapcontrol.getMap().setWorkspace(m_workspace);
    boolean isTrue =m_workspace.open(info);
    String name = m_workspace.getMaps().get(0);
    m_mapcontrol.getMap().open(name);

    m_mapcontrol.getMap().refresh();
}
这个代码看着跟我第一次提问的代码是一样的。也没有释放workspace吧?我试了一下感觉还是卡顿的。这个切换workspace方法是会占用主线程吗?可以放到子线程执行吗,然后加个loading,我是想即使是必须卡一下的话 也能看出来正在等待状态 而不是把主线程卡死了
可以放在子线程的哈,我这边测试工作空间切换确实是不卡顿的
...