我遇到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();
}
}
}
这是从我的Cache类中调用的,它是如此创建的
mActivity = this;
cacheHandeler = new Cache(mActivity);
来自我的主线程。
答案 0 :(得分:1)
应该是新的pruneDiskCacheTask();不是“新的pruneDiskCacheTask()。execute()”?
答案 1 :(得分:0)
感谢Shirish Hirekodi,我找到了答案。
这不是方法本身 if(DiskCache.exists()){
}
当我调用时,比较是创建需要放入异步任务的任务。
感谢。