Borrar caché en la aplicación de Android mediante progtwigción

cuál es la forma correcta de borrar el caché en la aplicación de Android mediante progtwigción. Ya uso el siguiente código pero no funciona bien

@Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); clearApplicationData(); } 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("EEEEEERRRRRRROOOOOOORRRR", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************"); } } } } 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; } } } return dir.delete(); } 

Imagen de mi teléfono Android

Si está buscando eliminar el caché de su propia aplicación, simplemente elimine su directorio de caché y ¡todo listo!

 public static void deleteCache(Context context) { try { File dir = context.getCacheDir(); deleteDir(dir); } catch (Exception e) { e.printStackTrace();} } 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; } } return dir.delete(); } else if(dir!= null && dir.isFile()) { return dir.delete(); } else { return false; } } 

La respuesta de dhams es correcta (después de haber sido editada varias veces), pero como muestran muchas ediciones del código, es difícil escribir un código correcto y robusto para borrar un directorio (con subdirectores) usted mismo. Por lo tanto, sugiero utilizar Apache Commons IO o alguna otra API que lo haga por usted:

 import org.apache.commons.io.FileUtils; ... // Delete local cache dir (ignoring any errors): FileUtils.deleteQuietly(context.getCacheDir()); 

PD: También elimine el directorio devuelto por context.getExternalCacheDir () si usa eso.

Para poder utilizar Apache Commons IO, agréguelo a su archivo build.gradle , en la parte de dependencies :

 compile 'commons-io:commons-io:2.4' 

Creo que se supone que clearApplicationData() colocar clearApplicationData() antes del super.OnDestroy().

Su aplicación no puede procesar ningún método cuando se ha cerrado.

No estoy seguro, pero siembro este código también. este bacalao funcionará más rápido y en mi mente también es simple. simplemente obtenga su directorio de caché de aplicaciones y elimine todos los archivos en el directorio

 public boolean clearCache() { try { // create an array object of File type for referencing of cache files File[] files = getBaseContext().getCacheDir().listFiles(); // use a for etch loop to delete files one by one for (File file : files) { /* you can use just [ file.delete() ] function of class File * or use if for being sure if file deleted * here if file dose not delete returns false and condition will * will be true and it ends operation of function by return * false then we will find that all files are not delete */ if (!file.delete()) { return false; // not success } } // if for loop completes and process not ended it returns true return true; // success of deleting files } catch (Exception e) {} // try stops deleting cache files return false; // not success } 

Obtiene todos los archivos de caché en la matriz de archivos por getBaseContext (). GetCacheDir (). ListFiles () y luego los borra uno por uno en un bucle por el método file.delet ()