2012-06-11 21 views
11

Lo que quiero hacer es borrar la memoria caché de la aplicación al salir de la aplicación.Borrar la caché de la aplicación al salir en android

esta tarea la puedo hacer manualmente siguiendo estos pasos.

< Aplicaciones -> Administrar Aplicaciones -> "Mi App" -> Borrar caché >>

pero quiere hacer esta tarea de programación en la salida de la aplicación .. por favor me ayude chicos ..

Gracias de antemano ..

+1

duplicado posible de [Cómo borrar la memoria caché Android] (http://stackoverflow.com/questions/6898090/how-to-clear-cache-android) – Gofurs

Respuesta

15

prueba este -

import java.io.File; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 

public class HelloWorld extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle *) { 
     super.onCreate(*); 
     setContentView(R.layout.main); 
    } 

    @Override 
    protected void onStop(){ 
     super.onStop(); 
    } 

    //Fires after the OnStop() state 
    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     try { 
     trimCache(this); 
     } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
    } 

    public static void trimCache(Context context) { 
     try { 
     File dir = context.getCacheDir(); 
     if (dir != null && dir.isDirectory()) { 
      deleteDir(dir); 
     } 
     } catch (Exception e) { 
     // TODO: handle exception 
     } 
    } 

    public static boolean deleteDir(File dir) { 
     if (dir != null && dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      if (!success) { 
       return false; 
      } 
     } 
     } 

     // The directory is now empty so delete it 
     return dir.delete(); 
    } 

} 

Consulte estos enlaces -

+0

El enlace que publicó no apunta a nada válido. –

+1

¡No elimine archivos en el hilo principal! ¡Debe hacer estas llamadas en otro hilo para evitar ANR! – Jona

+0

Hola, está borrando el db también ... ¿podemos omitir eso? –

9

para borrar los datos de solicitud Por favor Trate de esta manera. Creo que te ayuda.

public void clearApplicationData() 
{ 
    File cache = getCacheDir(); 
    File appDir = new File(cache.getParent()); 
    if (appDir.exists()) { 
     String[] children = appDir.list(); 
     for (String s : children) { 
      if (!s.equals("lib")) { 
       deleteDir(new File(appDir, s));Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************"); 
      } 
     } 
    } 
} 

public static boolean deleteDir(File dir) 
{ 
    if (dir != null &amp;&amp; dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      if (!success) { 
       return false; 
      } 
     } 
    } 
    return dir.delete(); 
} 
+0

Gracias por una respuesta tan maravillosa. pero mi preocupación es que cuando debería llamar a este método porque estoy teniendo mucha confusión sobre el momento de la llamada de este método –

+2

En su aplicación habrá una actividad en la que el usuario saldrá (generalmente la actividad principal), anulará el OnDestroy () y llame al código de caché claro anterior. – Sathesh

+0

Hola, está borrando el db también ... ¿podemos omitir eso? –

2

Sólo una aclaración, las respuestas funcione correctamente a menos que usted tiene que pasar la Aplicación contexto a trimCache en lugar del contexto Actividad (para evitar la pérdida de memoria), ya que trimCache es un método estático.

@Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     try { 
     trimCache(getApplicationContext()); //if trimCache is static 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
} 

Sin embargo, de lo contrario, puede hacer trimCache no estático y no hay necesidad de pasar cualquier contexto.

public void trimCache() { 
    try { 
    File dir = getCacheDir(); 
    if (dir != null && dir.isDirectory()) { 
     deleteDir(dir); 
    } 
    } catch (Exception e) { 
    // TODO: handle exception 
    } 
} 
+0

Hola, está borrando el db también ... ¿podemos omitir eso? –

Cuestiones relacionadas