我正在开发使用GoogleMaps的应用。我使用了面向片段的导航模式 - 其中一个主要的Activity包含片段,就像页面屏幕一样。对于更简单的状态处理,这些片段被设置为自己保留它们的实例(即setRetainInstance为true,链接到视图的所有字段都设置为null onDestroyView of fragment)。其中一个片段本身就包含GoogleMap。为了在屏幕旋转方面获得更好的性能,我使用setRetainInstance(true)作为SupportMapFragment。但每次创建SupportMapFragment的第一个Activity都会泄露。如果我删除setRetainInstance(true) - 没有内存泄漏。
MainActivity中onCreate的代码:
@Override
protected void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFragmentManager = getSupportFragmentManager();
//if activity created from scratch
if (savedInstanceState == null) {
MyMapFragment fragment = mFragmentManager.findFragmentByTag(fragmentTag);
if (fragment == null) {
fragment = MyMapFragment.newInstance();
}
if (fragment != null) {
fragment.setRetainInstance(true);
mFragmentManager
.beginTransaction()
.replace(R.id.fragment_container, fragment, fragmentTag)
.addToBackStack(fragmentTag)
.commit();
}
}
...
}
MyMapFragment&#39>中的代码
@Override
public void onStart() {
super.onStart();
FragmentManager fragmentManager = getChildFragmentManager();
SupportMapFragment mapFragment = (SupportMapFragment) fragmentManager.findFragmentByTag(MAP_FRAGMENT_TAG);
if (mapFragment == null) {
mapFragment = SupportMapFragment.newInstance();
mapFragment.setRetainInstance(true);
fragmentManager.beginTransaction().replace(R.id.map_container, mapFragment, MAP_FRAGMENT_TAG).commit();
}
mapFragment.getMapAsync(this);
...
}
此处有内存泄漏的屏幕截图:
每次重新创建Activity时,是否有办法避免此内存泄漏而不初始化MapFragment?