Перезагрузите Android Maps V2 SupportMapFragment при вращении

Я хочу улучшить производительность SupportMapFragment, когда устройство повернуто. Кажется, что фрагмент должен быть воссоздан. Я не уверен в этом, однако, когда устройство повернуто, плитки карт необходимо перезагрузить. Было бы разумно с точки зрения производительности иметь весь каркасный фрагмент, сохраненный и повторно используемый без необходимости повторного экземпляра фрагмента. Любое понимание этого было бы оценено.

Я объявляю SupportMapFragment в xml и используя SetupMapIfNeeded (), как описано в api docs.

private void setUpMapIfNeeded() { // Do a null check to confirm that we have not already instantiated the // map. if (mMap == null) { // Try to obtain the map from the SupportMapFragment. mMap = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map)).getMap(); // Check if we were successful in obtaining the map. if (mMap != null) { setUpMap(); } } } 

Solutions Collecting From Web of "Перезагрузите Android Maps V2 SupportMapFragment при вращении"

Проверьте класс RetainMapActivity из образцов. Работает как шарм. Вот что:

 public class RetainMapActivity extends FragmentActivity { private GoogleMap mMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.basic_demo); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); if (savedInstanceState == null) { // First incarnation of this activity. mapFragment.setRetainInstance(true); } else { // Reincarnated activity. The obtained map is the same map instance in the previous // activity life cycle. There is no need to reinitialize it. mMap = mapFragment.getMap(); } setUpMapIfNeeded(); } @Override protected void onResume() { super.onResume(); setUpMapIfNeeded(); } private void setUpMapIfNeeded() { if (mMap == null) { mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) .getMap(); if (mMap != null) { setUpMap(); } } } private void setUpMap() { mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); } 

}