首页 / 浏览问题 / 移动GIS / 问题详情
MapView 状态保存和恢复
mxc
112EXP 2018年08月23日
使用产品:supermap-imobile-9.0.1-103-android-zip-chs 操作系统:android 7.1 荣耀8

数据类型: 文件型  SMWU udb

问题详细描述:

Activity被系统销毁后 再次返回,状态没有被保存,而且同Activity内其他控件也没有被保存,不能恢复。

不使用MapView的Activity 是可以恢复状态的。

问题重现步骤:

1. 有 MapView 的 Activity

2. 在开发者模式开启 不保留活动(模拟活动因内存不足被销毁)

3  在有MapView的Activity 启动其他Activity 。时间 > 1分钟

4. 返回有MapView的Activity ,状态没有恢复。

2 个回答

你好,有MapView的Activity返回后是不会保存的,因为我们的Activity中的mapview和普通Activity的view是不一样的,Android会因为内存的原因杀掉这个Activity。还有你说的那个时间有很多种原因,比如说:1.手机性能 2.你的界面写得复杂不 3.你打开的工作空间数据源多不多,有没有网络数据源,4.打开的地图中的图层多不多,这些都会导致时间很长
9,237EXP 2018年08月23日
MapView 不会像其他控件那样保存状态吗,那会影响其他控件保存吗,如果我想恢复,是不是得重新打开,然后自己根据数据恢复到原来的场景
你说的其他控件是只什么控件?如果想恢复只能重新打开
其他控件 例如 TextView,ImageView等这些,会受mapView 影响,不能保存和恢复状态吗?
Activity有自己的生命周期,如果Acivity被销毁,重启时,Acitivity将会重新创建。

若果需要保护数据或恢复某个状态,需要在Activity销毁前保存需要的信息,在Activity重建时恢复对应的信息。你可查看一下Activity中onCreate(Bundle), onSaveInstanceState(Bundle), onRestoreInstanceState(Bundle)的详细说明,尤其是参数的使用。如果想保持和恢复地图显示的状态,可在这几方法中实现。

另外,通常的View不会保存数据,TextView,ImageView这种是在重建时设置了相同的内容。ListView可以保存其显示的状态,具体使用中也依赖于使用的方式以及关联的数据。
694EXP 2018年08月23日

大部分继承自 View的控件 都实现了 onSaveInstanceState,和onRestoreInstanceState ,会自动保存其简单的状态数据,例如 TextView

我测试发现 MapView 并不能保存和恢复,现在只能自己保存和恢复原来的场景。

MapView没有实现这个,这个涉及到打开的外部数据,不仅仅是显示的比例尺、中心点等状态,所以需要自己实现。与常规的一些View的实现方式是不一样的。
好,我自己实现
...