首頁>Program>source

我正在我的一个專案中使用Glide来顯示檔案中的圖像。

下面是我的代碼如何顯示圖像:

Glide.with(DemoActivity.this)
     .load(Uri.parse("file://" + imagePath))
     .into(mImage);

此位置的圖像( imagePath )不斷變化.預設情况下,Glide快取它在 ImageView中顯示的圖像 .因此,Glide正在為该位置的新圖像顯示快取中的第一张圖像。

如果我在 imagePath位置更改圖像 並使用其他具有相同名稱的圖片,那麼Glide將顯示第一张圖片,而不是新的圖片。

两个查詢是:

  1. 是否可以始终从檔案中提取圖像而不快取? 這樣就可以解決問题。

  2. 是否可以在获取新替換的圖像之前从快取中清除圖像? 這也可以解決問题。

最新回復
  • 6月前
    1 #

    這就是我解決此問题的方式。

    Method 1: When the URL changes whenever image changes

    Glide.with(DemoActivity.this)
        .load(Uri.parse("file://" + imagePath))
        .diskCacheStrategy(DiskCacheStrategy.NONE)
        .skipMemoryCache(true)
        .into(mImage);
    

    diskCacheStrategy()可用於處理磁盤快取,您可以使用skipMemoryCache()方法跳過記憶體快取。

    Method 2: When URL doesn't change, however, image changes

    如果您的URL保持不變,則需要使用簽名进行圖像快取。

    Glide.with(yourFragment)
         .load(yourFileDataModel)
         .signature(new StringSignature(yourVersionMetadata))
         .into(yourImageView);
    

    Glide signature()為您提供了將其他資料与快取键混合的功能。

      You can use MediaStoreSignature 如果您要从媒體商店中获取內容. MediaStoreSignature 允许您將日期修改時間,哑剧型別和媒體儲存專案的方向混合到快取键中.這三个屬性可靠地捕获了編輯和更新,使您可以快取媒體儲存庫。

      您可以 StringSignature 以及儲存為"檔案"的內容,以混合檔案日期修改時間。

      p

      如Glide wiki的快取和快取無效部分中所述:

      Because File names are hashed keys, there is no good way to simply delete all of the cached files on disk that correspond to a particular url or file path. The problem would be simpler if you were only ever allowed to load or cache the original image, but since Glide also caches thumbnails and provides various transformations, each of which will result in a new File in the cache, tracking down and deleting every cached version of an image is difficult.

      In practice, the best way to invalidate a cache file is to change your >identifier when the content changes (url, uri, file path etc).

      由於您無法更改檔案路徑,因此Glide提供了signature()API,该API可让您將一些其他資料混合到記憶體和磁盤快取键中,从而使呼叫者可以更好地控製快取資料何時無效.

      如果您希望每次从磁盤重新載入映像,都可以這樣更改代碼:

      Glide.with(DemoActivity.this)
           .load(Uri.parse("file://" + imagePath))
           .signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
           .into(mImage);
      

  • 6月前
    2 #

    這將删除Glide儲存的快取,應该在後台完成,否則会丟擲異常

    new Thread(new Runnable() {
              @Override
              public void run() {
                 Glide.get(MainActivity.this).clearDiskCache();
              }
         }).start();
    

  • 6月前
    3 #

    有两種處理 Glide的方法 快取重新整理,

    Firstway: -在下方添加滑行實現

    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .skipMemoryCache(true)
    

    Second way:

    如果您能够識別圖像更改,請在下面輸入新檔案名,

    .signature(new StringSignature(String.valueOf(fileName)))
    

    或者您希望每次都載入最新圖像,請在下面使用

    .signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
    

    希望這会有所帮助。

  • 6月前
    4 #

    Glide 4.2.0遇到了麻煩, StringSignature 尚未解決。

    看起来像 StringSignature 不再可用,您必须使用 ObjectKey 代替。

    所以代碼看起来像

    Glide.with(imageView).
    load(pathToImage).
    apply(new RequestOptions().signature(new ObjectKey("signature string"))).
    into(imageView);
    

  • css:两个div,一个固定宽度,另一个固定宽度
  • javascript:為什麼模組級return語句在Nodejs中起作用?