Clear application cache on exit on Android

What I want to do is clear the application cache when exiting the application.

I can do this task manually using these steps.

<Applications → Application Management → "My Application" → Clear Cache →

but I want to do this task by programming when I exit the application .. please help me guys ..

Thanks in advance.

+11
source share
3 answers

Try this option -

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

Refer to these links -

+15
source

Clear application data. Try this way. I think this will help you.

 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(); } 
+9
source

Just explanations, the answers work correctly, except that you need to pass the application context to trimCache instead of the Activity context (to avoid memory leak), because trimCache is a static method.

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

Otherwise, however, you can make trimCache non-static and there is no need to pass any Context.

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

Source: https://habr.com/ru/post/1263114/


All Articles