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..
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.
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.
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 -
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 && 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();
}
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
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With