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


 
Herramientas
  #1  
Viejo 02/05/14, 19:57:57
Avatar de Siameze
Siameze Siameze no está en línea
Usuario novato en la web
Mensajes: 2
 
Fecha de registro: may 2014
Mensajes: 2
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 08:45:35 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007