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

Respuesta
 
Herramientas
  #1  
Viejo 02/05/14, 19:57:57
Array

[xs_avatar]
Siameze Siameze no está en línea
Usuario novato en la web
 
Fecha de registro: may 2014
Mensajes: 2
Tu operador: Movistar

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();
tambien tengo esto en el back, para evitar cerrar la app. no se si tendra alguna relacion:

Código:
    @Override
    public void onBackPressed() {
        
        if (getSupportFragmentManager().getBackStackEntryCount() > 1) {    
            super.onBackPressed();
        }else if(getSupportFragmentManager().getBackStackEntryCount() == 1){
            mNavigationDrawerFragment.AbrirNavigationDrawer();
        }
        //    finish();

    }
Asi es como trato a todos los fragments:

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);
    }
si alguien puede ayudarme a solucionar esto, le voy a estar realmente agradecido =)

Mil gracias por leer!
Responder Con Cita


  #2  
Viejo 02/05/14, 21:23:08
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
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.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 15:57:00 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /