MapFragment: schlechte Leistung nach Verwendung der Zurück-Schaltfläche

Ich habe ein Leistungsproblem bei der VerwendungMapFragment zusammen mit dem Aktionsleistenmenü.

Der Fehler tritt auf, wenn drei Bedingungen erfüllt sind

Haben eineMapFragment instanziiert.Lösen Sie eine Fragmenttransaktion über das Optionsmenü aus und ersetzen Sie das Kartenfragment durch ein anderes Fragment.Drücken Sie die Zurück-Taste und kehren Sie zum Kartenfragment zurück. Die Leistung ist jetzt spürbar beeinträchtigt. Schwenken und Zoomen ist sehr ruckelig.

Das erneute Öffnen und Schließen des Optionsmenüs behebt das Problem.

Das Verhalten tritt nicht auf, wenn

Auslösen des Fragmentaustauschs über eine Ansichtsschaltfläche statt über das Optionsmenü.Auslösen des Fragmentersatzes direkt inonCreate()Ersetzen Sie das leere Fragment durch MapFragment aus dem OptionsmenüBerufungpopBackStack aus dem OptionsmenüVerwenden eines ListFragment anstelle einer MapView

Minimales Arbeitsbeispiel (erfordert Zugriff auf Google Maps API):

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import com.google.android.gms.maps.MapFragment;

public class MapFragmentBugActivity extends Activity {
    Fragment mMapFragment;
    String MAP = "Map";
    String BLANK = "Blank";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment_bug);
        mMapFragment = new MapFragment();
        getFragmentManager().beginTransaction()
                .replace(R.id.main, mMapFragment)
                .commit();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(MAP);
        menu.add(BLANK);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Fragment fragment;

        if (item.getTitle().equals(MAP)) {
            fragment = mMapFragment;
        } else {
            fragment = new Fragment();
        }

        getFragmentManager()
                .beginTransaction()
                .replace(R.id.main, fragment)
                .addToBackStack(null)
                .commit();

        return true;
    }
}

Aktivitätslayout, nichts Besonderes

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true" />

Antworten auf die Frage(1)

Ihre Antwort auf die Frage