Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clear Application cache on exit in android

What I want to do is to clear the cache memory of application on exit of application.

this task i can do manually by this steps.

< Apps --> Manage Apps --> "My App" --> Clear Cache>>

but i wants to do this task by programming on exit of application.. please help me guys..

Thanks in advance..

like image 897
Arun Joshi Avatar asked Jun 11 '12 09:06

Arun Joshi


People also ask

How do I automatically clear app cache?

Tap Clear data to clear app data and cache. You'll then have to select whether you want to clear all data associated with the app or just its cache. Clearing data will automatically clear the cache of the app as well.

Is it OK to clear app cache?

You should clear cached data on Android periodically, depending on how heavily you use your Android device. Obsessively clearing your Android cache would be counterproductive, since the point of saving temporary files is to make your regular app experience smoother.


3 Answers

Try this one -

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 these links -

  • how-to-clear-data-cache-of-the-application-through-code
like image 78
Praveenkumar Avatar answered Oct 11 '22 20:10

Praveenkumar


To clear Application Data Please Try this way. I think it 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();
}
like image 21
Md Abdul Gafur Avatar answered Oct 11 '22 20:10

Md Abdul Gafur


Just a clarification, the answers work properly except you have to pass the Application context to trimCache instead of the Activity context (to avoid memory leak), since trimCache is an static method.

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

However, otherwise, 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
  }
}
like image 39
Rod Avatar answered Oct 11 '22 21:10

Rod