with-空白fragment
Glide中with函數有很多的重載方法,可以傳入Context,Activity,FragmentActivity,v4.Fragment,android.app.Fragment,View等等,而這些參數的類型決定了Glide的作用域。這些作用域可以分爲Application作用域(從應用啓動到應用銷燬)和非Application作用域(從頁面啓動到頁面銷燬),針對非Application作用域,Glide會在with函數中創建出一個空白的fragment和當前頁面(如Activity)綁定,這樣以來就可以監聽到當前頁面的啓動和銷燬的一系列生命週期(Glide主要監聽onStart onStop onDestroy),從而做到在頁面啓動之後開啓圖片的加載,在頁面退出之後暫停圖片的加載,以及對活動緩存的一些列操作等等。
精確到代碼層面,Glide在with函數調用的時候會有兩個關鍵的類被創建出來,一個是上面提到的Fragment(如RequestManagerFragment),另一個就是ReqeustManager,專門負責生命週期的管理。在ReqeustManager創建的時候,會持有RequestManagerFragment中的lifecycle對象的引用,並將當前ReqeustManager註冊到RequestManagerFragment lifecycle的集合中,而RequestManagerFragment監聽到生命週期的回調之後就回通過遍歷lifecycle集合通知到每一個ReqeustManager,ReqeustManager就可以管理到Glide加載的生命週期了。
load
load函數的邏輯很簡單,他也有多種重載方法,見下圖
但是不管是哪種方法,執行的都是下面的代碼,通過RequestBuilder去load,而RequestBuilder中又有多種load的重載
public RequestBuilder<Drawable> load(@Nullable Integer resourceId) {
return asDrawable().load(resourceId);
}
public RequestBuilder<Drawable> asDrawable() {
return as(Drawable.class);
}
最終調用到,所以load方法只是保存了資源的地址而已
private RequestBuilder<TranscodeType> loadGeneric(@Nullable Object model) {
this.model = model;
isModelSet = true;
return this;
}
into
未完,待續,,,