![]() |
|
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
|
Herramientas |
|
#1
|
||||
|
||||
|
fragments y ram
Buenas! Estoy teniendo un problema cuando intento remplazar un fragment de un contenedor.
Los traslados se hacen todos bien, pero al parecer no se libera la ram que ocupan los views, a pesar de que los limpio todos. Cuanto apretó back tampoco se limpia nada del fragment, por lo tanto, con dos fragment yendo atrás y adelanto llego a ocupar 70mb de ram rapidísimo, cuando cada fragment no supera los 12mb. el metodo que uso para pasar de un fragment a otro es este: Código:
FragmentManager fragmentManager = getSupportFragmentManager();
for(int i = 0; i < fragmentManager.getBackStackEntryCount()-1; ++i) {
fragmentManager.popBackStack();
}
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left)
.replace(R.id.container, fr,tag)
.addToBackStack(null)
.commit();
Código:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
super.onBackPressed();
}else if(getSupportFragmentManager().getBackStackEntryCount() == 1){
mNavigationDrawerFragment.AbrirNavigationDrawer();
}
// finish();
}
Código:
private ArrayList<ElementoLista> Aelem= new ArrayList<ElementoLista>();
private String mTabla;
private int modoMenu;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//Interface para comunicarse con el activity principal.
final Communicator comunicador = (Communicator) getActivity();
//Inicializo el gridview.
final GridView lv = (GridView) getView().findViewById(R.id.lvtragos);
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
comunicador.clickEnListaElementos(getTabla(),Aelem.get(position).getId(),(byte) 3);
};
});
final AdaptadorElemLista adaptador = new AdaptadorElemLista(getView().getContext());
lv.setAdapter(adaptador);
setHasOptionsMenu(true);
}
@Override
public void onDestroyView() {
getView().destroyDrawingCache();
super.onDestroyView();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_3, container,false);
}
Mil gracias por leer! |
|
|
|
#2
|
||||
|
||||
|
No te preocupes que si el sistema necesita RAM lo primero que te liberará serán los Fragment que no están añadidos a una Activity.
El Fragment sigue existiendo pero no está añadido a ninguna Activity, técnicamente podrías volver a añadirlo a la Activity (a la misma, nunca a otra distinta). Más bien deberías de preocuparte de lo contrario, de que si por necesitar RAM quiera liberarte algún Fragment que está en uso mientras la Activity está en segundo plano. Donde entra el onSaveInstanceState del Fragment y de la propia Activity, y tener que almacenar y luego recuperar la información que necesitas, incluido al propio Fragment. |
| Respuesta |
Estás aquí
|
||||||
|
||||||
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 15:58:18 (GMT +1)
HTCMania: líderes desde el 2007





