Android 仅由于配置更改而重新创建活动时,保留的片段是否有效?

Android 仅由于配置更改而重新创建活动时,保留的片段是否有效?,android,android-fragments,Android,Android Fragments,我试图保留一个片段,不仅是在由于配置更改而重新创建活动时,而且是在因为其他原因而重新创建活动时,比如当用户离开它并在一秒钟后返回时。显然,它不起作用,因为在下面的代码中 homeMapFragment = (MapFragment)getFragmentManager().findFragmentByTag(homeMapFragmentTag); if(homeMapFragment == null) { homeMapFragment = new MapFragment();

我试图保留一个片段,不仅是在由于配置更改而重新创建活动时,而且是在因为其他原因而重新创建活动时,比如当用户离开它并在一秒钟后返回时。显然,它不起作用,因为在下面的代码中

homeMapFragment = (MapFragment)getFragmentManager().findFragmentByTag(homeMapFragmentTag);
if(homeMapFragment == null) {
    homeMapFragment = new MapFragment();
    homeMapFragment.setRetainInstance(true);
    getFragmentManager().beginTransaction().add(R.id.map_fragment_placeholder, homeMapFragment, homeMapFragmentTag).commit();
}
执行总是进入
if
分支。这是一个失败的事业,还是我可以在这里做些别的事情

澄清:这个片段实际上是可见的。我的意图不是在不同的活动之间保留一些数据,而是保留视图本身。这是一个地图视图,初始化地图需要一些时间,这是我想要避免的

显然,它不起作用

这是因为保留的片段仅保留用于配置更改,而不是其他事件

onSaveInstanceState()
涵盖了更多场景(例如,用户按下HOME键,您的进程稍后会终止,然后用户通过最近的任务列表返回到您的应用程序)

然而,即使这样,也不包括您所描述的内容:用户按下返回键,然后按下某个按钮,将返回到他们离开的相同活动。在这种情况下,从Android的角度来看,这是两个逻辑上不同的活动实例,实际上并不相关。如果您想保留它们之间的数据,最好由备份存储(例如,数据库、
SharedReferences
或其他文件)处理,还可以选择使用一些内存缓存来节省I/O时间