2013-12-10 54 views
1

我測試升級以使用Android通用圖像加載程序1.9.0。我已經在Android 4.2上測試過了。我遇到了一個問題,我正在下載和緩存意圖服務中的圖像,以便在後臺線程上運行以不干擾用戶。但是,UIL抱怨說我沒有在主線程中加載這些圖像。我不想在主線程中加載這些圖像,我只是希望能夠將它們緩存在後臺的光盤中,以便在用戶實際查看指定圖像時不需要下載它們。除了ImageLoader.loadImage之外,是否還有另一種預先在後臺線程上緩存圖像的方法?如果不是,我如何允許在不是主線程的線程上對磁盤進行預緩存?所有這些代碼都在IntentService中運行。如何使用通用圖像加載程序在意圖服務(後臺線程)中緩存圖像

ImageLoaderConfiguration:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
      getApplicationContext()) 
      .threadPriority(Thread.MAX_PRIORITY) 
      .memoryCacheSize(memoryCacheSize) 
      .denyCacheImageMultipleSizesInMemory() 
      .threadPoolSize(5) 
      .discCacheFileNameGenerator(new MyFileNameGenerator()) 
      .tasksProcessingOrder(QueueProcessingType.LIFO) 
      .build(); 

DisplayImageOptions:

DisplayImageOptions options = new DisplayImageOptions.Builder().cacheOnDisc() 
       .imageScaleType(ImageScaleType.NONE).build(); 

加載圖片代碼:

imageLoader.loadImage(imageURI, options, 
      new SimpleImageLoadingListener() { 
       @Override 
       public void onLoadingComplete(String imageUri, View view, 
         Bitmap loadedImage) 
       { 
        loadNext(); // gives a notification update and loads next image URI in queue 
       } 

       @Override 
       public void onLoadingFailed(String imageUri, View view, 
         FailReason failReason) 
       { 
        loadNext(); // gives a notification update and loads next image URI in queue 
       } 
      }); 

回答

2

其實UIL不提供預加載圖像的方法,即只添加到盤緩存。它總是返回解碼的位圖。你可以使用loadImageSync(...)。我認爲這對你更合適。

+0

看起來像這樣繞過了主線程上的處理程序檢查。謝謝。 –

+1

我試圖實現完全相同的事@ user1236327,但我沒有看到loadImageSync緩存,你如何管理你的情況? – yahya

+0

您是否在您通過'loadImageSync(...)'傳遞的選項中啓用緩存? – NOSTRA

0

潛入UIL的代碼後,我想出了一個解決方案。不確定這是否是最好的,但可能會在未來幫助某人。如果您在DisplayImageOptions設置自己的處理程序,它跳過了檢查,以確保該處理程序是在主線程:

DisplayImageOptions options = new DisplayImageOptions.Builder().cacheOnDisc() 
      .imageScaleType(ImageScaleType.NONE) 
      .handler(new Handler()) // added this line 
      .build(); 
相關問題