2017-02-21 8 views
0

Я добавляю Perference в свои PerferenceFragment.Что случилось с удалением диска Fscco diskcache и расчета размера()

deleteCache.setOnPreferenceClickListener(preference -> { 
     Fresco.getImagePipeline().clearDiskCaches(); 
     deleteCache.setSummary(String.format(getString(R.string.delete_format), getDiskSize())); 
     return true; 
    }); 

public static final long getDiskSize(){ 
    long bytes = Fresco.getImagePipelineFactory().getMainFileCache().getSize(); 
    return bytes==-1?0:bytes; 
} 

Я думаю, что я нажимаю perference что getDiskSize() должна возвращать 0, но я должен нажать второй или более раз, то summary показать diskcache 0 B.I не может найти причину о моем решении.

Дополнительная информация:

  • Fresco 1,1
  • get cache size
  • Я использую Fresco.getImagePipeline().clearCaches(); он не может SLOVE проблема

ImagePipelineConfig

Set<RequestListener> requestListeners = new HashSet<>(); 
    requestListeners.add(new RequestLoggingListener()); 
    ImagePipelineConfig config = OkHttpImagePipelineConfigFactory 
      .newBuilder(this, RetrofitHelper.initClient()) 
      .setBitmapsConfig(Bitmap.Config.RGB_565) 
      .setRequestListeners(requestListeners) 
      .build(); 

I нажмите preference, чтобы getDiskSize() не смог вернуть 0 в первый раз.

ответ

0

Я прочитал код, чтобы найти это асинхронная операция.

return Task.call(
     new Callable<Void>() { 
     @Override 
     public Void call() throws Exception { 
      mStagingArea.remove(key); 
      mFileCache.remove(key); 
      return null; 
     } 
     }, 
     mWriteExecutor); 
/** 
* Represents the result of an asynchronous operation. 
* 
* @param <TResult> 
*   The type of the result of the task. 
*/ 
public class Task<TResult>