package net.dev123.yibo.service.task;
import java.io.File;
import java.io.FileFilter;
import net.dev123.commons.Constants;
import net.dev123.yibo.YiBoApplication;
import net.dev123.yibo.service.cache.ImageCache;
import android.app.Activity;
import android.os.AsyncTask;
import android.util.Log;
public class ImageCacheQuickCleanTask extends AsyncTask<Void, Void, Boolean> {
private static final String TAG = "ImageCacheQuickCleanTask";
private static final int NORMAL_EXPIRED_DAYS = 10;
private static final int HEAD_EXPIRED_DAYS = 20;
private Activity context;
public ImageCacheQuickCleanTask(Activity context) {
this.context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... params) {
clearCachedImages();
return true;
}
private boolean clearCachedImages() {
int cleanCount = cleanExpiredImage();
if (Constants.DEBUG) {
Log.d(TAG, "clean image count: " + cleanCount);
}
return true;
}
private int cleanExpiredImage() {
int cleanCount = 0;
File cacheFolder = new File(YiBoApplication.getSdcardCachePath());
File innerCacheFolder = new File(YiBoApplication.getInnerCachePath());
FileFilter filter = null;
if (innerCacheFolder.isDirectory()) {
filter = null;
for (File folder : innerCacheFolder.listFiles()) {
String path = folder.getAbsolutePath();
if (!folder.isDirectory()
|| path.endsWith(ImageCache.IMAGE_EMOTIONS)) {
continue;
}
filter = normalFileFilter;
if (folder.getAbsolutePath().endsWith(ImageCache.IMAGE_HEAD_MINI)
|| folder.getAbsolutePath().endsWith(ImageCache.IMAGE_HEAD_NORMAL)) {
filter = headFileFilter;
}
for (File file : folder.listFiles(filter)) {
file.delete();
//Log.d(TAG, "deleting: " + file.getAbsolutePath());
cleanCount++;
}
}
}
if (cacheFolder.isDirectory()) {
filter = null;
for (File folder : cacheFolder.listFiles()) {
String path = folder.getAbsolutePath();
if (!folder.isDirectory()
|| path.endsWith(ImageCache.IMAGE_EMOTIONS)) {
continue;
}
filter = normalFileFilter;
if (path.endsWith(ImageCache.IMAGE_HEAD_MINI)
|| path.endsWith(ImageCache.IMAGE_HEAD_NORMAL)) {
filter = headFileFilter;
}
for (File file : folder.listFiles(filter)) {
file.delete();
//Log.d(TAG, "deleting: " + file.getAbsolutePath());
cleanCount++;
}
}
}
return cleanCount;
}
ExpiredTimeFilter normalFileFilter = new ExpiredTimeFilter(NORMAL_EXPIRED_DAYS);
ExpiredTimeFilter headFileFilter = new ExpiredTimeFilter(HEAD_EXPIRED_DAYS);
private class ExpiredTimeFilter implements FileFilter {
private long expiredTime;
public ExpiredTimeFilter(int remainDays) {
long intervalTime = 1000 * 60 * 60 * 24; //1天的毫秒值
expiredTime = System.currentTimeMillis() - remainDays * intervalTime;
}
@Override
public boolean accept(File file) {
if (file.lastModified() > expiredTime) {
return false;
}
return true;
}
};
}