MapFragment: desempenho ruim após usar o botão Voltar
Tenho um problema de desempenho ao usarMapFragment
junto com o menu da barra de ação.
O erro surge quando três condições são atendidas
Tenha umMapFragment
instanciado.Acione uma transação de fragmento no menu de opções, substituindo o fragmento do mapa por outro fragmento.Aperte o botão Voltar e retorne ao fragmento do mapa. O desempenho agora está visivelmente degradado. A panorâmica e o zoom são muito espasmódicos.Abrir o menu de opções novamente e dispensá-lo novamente corrige o problema.
O comportamento não surge quando
Acionando a substituição do fragmento a partir de um botão de visualização em vez do menu de opções.Acionando a substituição do fragmento diretamente noonCreate()
substituindo o fragmento em branco por MapFragment no menu de opçõeschamandopopBackStack
no menu de opçõesusando um ListFragment em vez de um MapViewExemplo de trabalho mínimo (requer acesso à API do Google Maps):
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;
}
}
Layout da atividade, nada de especial
<?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" />