2014-05-20 125 views
1

你好我正在一個Android應用程序中,我需要從URL獲取位圖,所以我使用好的庫Picasso來獲取位圖並自動執行緩存。如何在Android中使用Picasso維護位圖緩存

這裏是我的示例代碼

target = new Target() { 
    @Override 
    public void onPrepareLoad(Drawable drawable) {} 

    @Override 
    public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) { 
     if(bitmap != null) { 
      mProgressBar.setVisibility(View.GONE); 
      qrCodeImageView.setVisibility(View.VISIBLE); 
      qrCodeImageView.setImageBitmap(bitmap); 
     } 
    } 

    @Override 
    public void onBitmapFailed(Drawable drawable) {} 
}; 

Picasso.with(this).load(URL).into(target); 

這個代碼在下載從URL中第一次位圖,則下一次前關閉它從緩存中是正確的,但挑選的應用程序,當我關閉該應用從「最近打開的應用程序「,然後再次開始從URL下載位圖。

但是,在這裏我想它應該總是從緩存中選擇一次下載位圖後。任何想法在Android中使用Picasso來做到這一點?

在此先感謝。

+0

我認爲這是更好的方法來清除應用程序退出緩存。在您離開活動屏幕之後,必須清理它,這樣您才能獲得良好的用戶體驗(感謝Picasso,他正在處理這些內容)。在https://github.com/square/picasso上創建一個問題可能會幫助你得到更好的答案。 –

回答

0

畢加索使用一個構建器來初始化將在初始化時調用的緩存。如果緩存存在,目標將自動從緩存中獲取。但是,如果你想管理你自己的緩存機制,那麼你應該創建一個實例並通過你的Activity/Application來訪問它。

在應用程序/ Activity類

/** Other Initialization **/ 
private LruCache mCache; 
private Picasso mPicasso; 

private void setupImageManager() { 
    Picasso.Builder builder = new Picasso.Builder(this); 
    mCache = new LruCache(this); 
    builder.memoryCache(mCache); 
    mPicasso = builder.build(); 
} 

public Picasso getPicasso() { 
    return mPicasso; 
} 

僅供參考畢加索如何初始化檢查Source at GitHub

+0

好的,您在回答中分享的代碼將解決我正在查找的問題? –

+0

是的,如果您使用的是okhttp lib,那麼它會將其緩存在磁盤上並從磁盤重新加載。如果您正在使用其他一些http庫,那麼您需要手動設置緩存並使用下載器進行維護。在kitkat/Android 4.4 okhttp出現在框架本身之後,因此您不必擔心它。 –

+0

因此,即使我關閉了應用程序「最近的選項卡」,上面的代碼仍會保持緩存? –