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
私の理解では、何かを Async Task に入れると、それは 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);
私のメインスレッド内から。