使用glide填過的各種坑

2021-07-25 19:52:16 字數 1376 閱讀 7974

使用版本glide-3.7.0

坑一:無法手動重新整理快取,只能改變key新增自定義簽名,我是將頭像版本號放到key中了,因為取頭像是根據手機號取的,頭像url路徑並不會變,而且首次載入時並不能拿到版本號。

builder.signature(new stringsignature(etag));

坑二:從磁碟快取載入頭像時太慢,導致能看到由預設圖變到頭像的過程,給人感覺頭像閃了一下,體驗不好。因為glide的磁碟快取載入邏輯放到了工作執行緒中,提高了滑動時的流暢度,但是也降低了載入速度,沒想到好辦法解決;

坑三:伺服器返回的是xml資料,需要解析完xml才能獲取頭像byte,好在glide有現成的api

builder.asbitmap().imagedecoder(decoder)

public class xmlbitmapdecoder implements resourcedecoder

@override

public resourcedecode(inputstream is, int width, int height) throws ioexception

@override

public string getid()

return this.id;

}}

坑四:

訊息列表中因為有不同的訊息型別,預設頭像也不一樣,glide佔位圖不設定時,會設定null,所以onloadstarted方法裡需要區分開;

坑五:token驗證,切圓角圖,這個相對容易實現

坑六:某些場景需要跳過快取強制從網路拉取,但是需要先用快取的頭像當佔位圖,這點上glide沒有開放現成的api,實現方式有點迂迴:

drawabletyperequestbuilder = glide.with(mcontext).using(new streammodelloader() 

@override

public void cleanup()

@override

public string getid()

@override

public void cancel() };}

}).load(glideurl);

重點是loaddata裡邊不做任何事,正常情況下這裡本該寫從網路拉取頭像獲取輸入流的邏輯。這樣就能變相實現從快取拿到bitmap。

坑七:還是載入慢的問題,但是有時候從memory快取裡載入竟然也需要50,60ms,開啟glide除錯,發現從快取載入只需要零點幾毫秒,但是從我**呼叫到真正發起請求竟然用了大部分時間,有人說是得到view寬高後才會發起請求,於是新增.override(w, h),效果不明顯。

已經決定自己實現一套頭像載入邏輯了,用第三方的實在是不夠靈活

使用webapi的各種坑

1 如果webapi使用了自定義基類,基類中所有定義成public的方法,比如滿足restful風格,不符合的必須用 httpget httppost 特性修飾。2 post引數傳遞引數方法,也可以用dynamic 或定義乙個實體類 public class msg public string co...

Glide使用過程中遇到的坑

專案之前使用的載入庫是universal image loader,但是此庫已經好久不維護了,同時也發現了更加不錯的載入庫,也就是glide,用起來很方便並且記憶體佔用量還很令人滿意,所以決定大刀闊斧的將之前的載入庫換成glide。但是在換使用者頭像相關模組的時候發現問題了,就是載入網路時第一次載入...

Glide開源庫存在的暗坑

glide庫想必大家都非常喜歡使用,無論是載入gif或者bitmap圖,都如絲般順滑!但是,但是,就在這個但是上,你是否遇到過glide載入失敗的情況呢?問題追蹤過程 1.url位址有問題?抓到url放到瀏覽器,完全能正常展示 2.glide有bug?但是別的手機都是ok,都能正常展示呢?這怎麼解釋...