Glide生命週期原碼解析

2021-08-26 05:41:34 字數 2587 閱讀 4183

glide生命週期管理的原碼其實就在

glide.with(getcontext()) 這個方法裡面
@nonnull

public static requestmanager with(@nonnull context context)

@nonnull

private static requestmanagerretriever getretriever(@nullable context context)

獲取到了乙個請求管理者 requestmanagerretriever,最終是通過工廠模式建立的

在glide.get(context)方法中最後會執行到

initializeglide(...) 這裡
private static void initializeglide(@nonnull context context, @nonnull glidebuilder builder)
一些無關**刪掉,這裡會對glide賦值,而在builder.build(...)方法中,對requestmanagerretriever進行了建立
glide build(@nonnull context context)
刪除無用**,一目了然.最後在new glide()**裡對

requestmanagerretriever 進行了賦值.
所以再貼一下之前建立requestmanagerretriever的方法

@nonnull

public static requestmanager with(@nonnull context context)

@nonnull

public requestmanager get(@nonnull context context) else if (context instanceof activity)

}}

最後通過requestmanagerretriever.get(...)方法進行了了建立乙個無ui的fragment來進行生命週期的管理,這裡只分析fragmentactivity,其它的都是一樣的道理.先貼**

@nonnull

public requestmanager get(@nonnull fragmentactivity activity) else

}

首先獲取到fragmentmanager管理者,再通過 supportfragmentget(...)方法來獲取到requestmanager類,看**的注釋

@nonnull

private requestmanager supportfragmentget(

@nonnull context context,

@nonnull fragmentmanager fm,

@nullable fragment parenthint,

boolean isparentvisible)

return requestmanager;//最後返回

}

先來看看requestmanager的構造方法,這裡將生命週期監聽加入進去,並也新增了網路連線監聽和請求監聽等,所以glidle的生命週期管理最後也就是在requestmanager類裡面來管理的.

requestmanager( glide glide,lifecycle lifecycle, requestmanagertreenode treenode,requesttracker requesttracker, 

connectivitymonito***ctory factory,context context) else

lifecycle.addlistener(connectivitymonitor);

setrequestoptions(glide.getglidecontext().getdefaultrequestoptions());

glide.registerrequestmanager(this);

}

再來看看建立fragment的**

@nonnull

private supportrequestmanagerfragment getsupportrequestmanagerfragment(

@nonnull final fragmentmanager fm, @nullable fragment parenthint, boolean isparentvisible)

pendingsupportrequestmanagerfragments.put(fm, current);

fm.begintransaction().add(current, fragment_tag).commitallowingstateloss();

handler.obtainmessage(id_remove_support_fragment_manager, fm).sendtotarget();}}

return current;

}

Vue生命週期解析

生命週期所有階段 建立 beforemount 注意 這裡進行虛擬的dom變成真實的dom資料 mounted 最早在這裡渲染的變數被賦值了,最遲在這裡做資料請求 要和第三方的元件庫進行結合的時候,我們要放在mounted裡面 更新 注意 資料在mounted裡進行變化,在這裡的資料都是更新後的資料...

vue生命週期淺解析

每個vue例項從建立到銷毀都有乙個生命週期,理解生命週中每個鉤子的意義可以幫助我們快速理解使用vue 下圖源自vue官網 1.beforecreated 建立前 vue例項化以後首先執行beforecreated鉤子,該鉤子函式在資料觀測和事件配置之前被呼叫,所以無法訪問例項中的資料和方法 befo...

Vue的生命週期解析

1.每當我們新建乙個vue的時候,此時vue的生命週期就正式開始了 2.每當我們引入vue的包的時候,就自動引入new vue 3.每當我們引入resource包的時候,就會自動引入this.http.put,get等等 請求 beforecreate 該方法執行的時候資料都還沒有初始化 creat...