Löschen Sie den Cache in der Android-Anwendung programmgesteuert

Was ist der richtige Weg, um den Cache in Android-Anwendung programmgesteuert zu löschen. Ich verwende bereits folgenden Code, aber es sieht nicht gut für mich aus

@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(); } 

Bild von meinem Android-Handy

Wenn Sie nach dem Lösch-Cache Ihrer eigenen Anwendung suchen, löschen Sie einfach Ihr Cache-Verzeichnis und alles ist erledigt!

 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; } } 

Die Antwort von Dhams ist korrekt (nachdem sie mehrmals bearbeitet wurde), aber wie die vielen Bearbeitungen des Codes zeigen, ist es schwierig, korrekten und robusten Code zum Löschen eines Verzeichnisses (mit Unterverzeichnissen) selbst zu schreiben. Daher empfehle ich dringend, Apache Commons IO oder eine andere API zu verwenden, die dies für Sie erledigt:

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

PS: Löschen Sie auch das Verzeichnis, das von context.getExternalCacheDir () zurückgegeben wird, wenn Sie dieses verwenden.

Um Apache Commons IO verwenden zu können, fügen Sie dies zu Ihrer build.gradle Datei im dependencies :

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

Ich denke, du clearApplicationData() vor dem super.OnDestroy().

Ihre App kann keine Methoden verarbeiten, wenn sie heruntergefahren wurde.

Ich bin mir nicht sicher, aber ich saue diesen Code auch. dieser Kabeljau wird schneller und in meinen Gedanken auch einfach funktionieren. Holen Sie einfach Ihr Apps-Cache-Verzeichnis und löschen Sie alle Dateien im Verzeichnis

 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 } 

Es ruft alle Cache-Dateien im File-Array nach getBaseContext (). GetCacheDir (). ListFiles () ab und löscht dann nacheinander in einer Schleife die Methode file.delet ()