我在使用 StrictMode 时遇到问题,我有以下 AsyncTask
class pruneDiskCacheTask extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
pruneRecursive(DiskCache);
return null;
}
void pruneRecursive(File fileOrDirectory){
if (fileOrDirectory.isDirectory()) {
for (File child : fileOrDirectory.listFiles()) {
pruneRecursive(child);
}
}else {
if(checkForPruningAsync(fileOrDirectory)){
fileOrDirectory.delete();
}
}
}
public boolean checkForPruningAsync(File file){
String fileName = file.getName();
String type = fileName.substring(fileName.lastIndexOf(".")+1);
Date lastModified = new Date(file.lastModified());
if(type.equals("json")){
Date cacheLifetime = new Date(new Date().getTime() - keepJsonFor);
if(lastModified.before(cacheLifetime)){
return true;
}
}else if(type.equals("txt")) {
Date cacheLifetime = new Date(new Date().getTime() - keepTxtFor);
if(lastModified.before(cacheLifetime)){
return true;
}
}else{
Date cacheLifetime = new Date(new Date().getTime() - keepImagesFor);
if(lastModified.before(cacheLifetime)){
return true;
}
}
return false;
}
}
它抛出一个 StrictMode 错误(似乎没有使程序崩溃,但我不喜欢它弹出)
android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk
我的理解是,如果您将某些内容放入异步任务中,则它符合 StrictMode 的要求。但在这种情况下,我似乎错了。有人可以告诉我我做错了什么吗?
编辑
这是我按要求调用异步任务的方式
public void pruneDiskCache(){
synchronized (mDiskCacheLock) {
// Wait while disk cache is started from background thread
while (mDiskCacheStarting) {
try {
mDiskCacheLock.wait();
} catch (InterruptedException e) {
}
}
if(DiskCache.exists()) {
new pruneDiskCacheTask().execute();
}
}
}
这是从我的缓存类中调用的,它是这样创建的
mActivity = this;
cacheHandeler = new Cache(mActivity);
从我的主线程中。