前言
在App中,和用戶交互的主要是Activity和Fragment陕贮,在交互的過程中鳖孤,我們需要執(zhí)行各種各樣的任務(wù)。
- 好的任務(wù)的管理需要關(guān)注組件的生命周期剔交。舉個例子:在生命周期開始的時候,我們要啟動任務(wù)的執(zhí)行夺颤,在生命周期結(jié)束的時候镣奋,我們要停止任務(wù)的執(zhí)行,這樣可以很好的節(jié)約系統(tǒng)資源悉尾。
- 不好的任務(wù)的管理基本上不去關(guān)注生命周期突那,這樣比較嚴重的浪費系統(tǒng)資源,給用戶帶來很不好的體驗 :(
所以我們在對任務(wù)的管理上要著重考慮 Activity和Fragment 的生命周期构眯。
如何去獲取Activity和Fragment生命周期?
問題:
Activity和Fragment都是我們自己實現(xiàn)的愕难,外在的框架如何知道Activity和Fragment的生命周期?
回答:
可行的方式是:
-
我們主動去告訴這些框架當前Activity和Fragment的生命周期惫霸,如在
onCreate
猫缭,在onDestroy
的時候去告訴框架,我開始了它褪,我結(jié)束了饵骨。但是這樣很不友好:增加了代碼量,也容易忘記告訴框架Activity和Fragment的生命周期茫打。 - 讓框架主動去獲取當前 Activity和Fragment的生命周期居触,這樣我們就非常輕松啦。Glide就是去主動獲取當前Activity和Fragment的生命周期的老赤。
Glide主動獲取當前Activity和Fragment的生命周期
Glide為你當前Activity和Fragment生一個孩子轮洋,這個孩子跟你的Activity和Fragment的生死存亡。利用這個孩子抬旺,Glide輕易掌握其生命周期弊予。
如何實現(xiàn)?看代碼吧:
Glide加載圖片的代碼:
Glide.with(this)
.load(_url)
.fitCenter()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(R.drawable.loading)
.into(_iv);
Glide.with(this)
將當前Activity和Fragment的實例傳入進去开财。
Activity和Fragment的實例交給RequestManagerRetriever來處理汉柒。我們繼續(xù)看它是如何處理的:
將一個fragment:SupportRequestManagerFragment加入到你的Activity或者Fragment误褪。這個SupportRequestManagerFragment的生命周期與你的你的Activity或者Fragment完美貼合。
代碼實現(xiàn):
getSupportRequestManagerFragment(fm):
孩子 SupportRequestManagerFragment
他是一個fragment:
它有以下特色:
- 沒有view碾褂,也就是沒有界面兽间。
- 它持有一個RequestManager,在適當?shù)臅r候調(diào)用其方法正塌。(系統(tǒng)內(nèi)存緊張的時候)
- 明確的生命周期調(diào)用嘀略,也就是把生命周期告訴某些人,某些組件乓诽,讓他們來做相關(guān)的事情帜羊。(告訴RequestManager)