我是一名Android開發(fā),目前就職于字節(jié)跳動。我畢業(yè)來到深圳已經(jīng)8年多甲雅;轉(zhuǎn)行從事Android開發(fā)也已5年多。 2021是我年齡上一個重要節(jié)點蚓炬,我二十多歲的青春慕淡,用完了盾沫。 ...

我是一名Android開發(fā),目前就職于字節(jié)跳動。我畢業(yè)來到深圳已經(jīng)8年多甲雅;轉(zhuǎn)行從事Android開發(fā)也已5年多。 2021是我年齡上一個重要節(jié)點蚓炬,我二十多歲的青春慕淡,用完了盾沫。 ...
作者你好忍疾,看完后有點疑問闯传,如果按上面的例子來看,數(shù)據(jù)的儲存和生命周期的對應(yīng)都可以由LiveData單獨實現(xiàn)了吧膝昆,自己封裝一個類來管理liveData也可以的吧,這里用ViewModel的優(yōu)勢在哪里呢叠必?
“終于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握荚孵!Jetpack AAC 系列文章:“終于懂了“系列:Jetpack AAC完整解析(一)Lifecycle 完全掌握![http://www.reibang.com/p/7...
整個指紋密碼流程下來纬朝,你添加的密鑰起到了什么作用呢
Android開發(fā) 多語言收叶、指紋登錄、手勢登錄簡介 隨著互聯(lián)網(wǎng)的發(fā)展不光手機配置越來越高共苛,app產(chǎn)品要求也越來越高了∨忻唬現(xiàn)在做APP時產(chǎn)品都會讓我們加上 多語言、指紋登錄隅茎、手勢登錄等功能澄峰。下面代碼完全適配Android8....
Github 鏈接 Collie [https://github.com/happylishang/Collie] App性能如何量化 如何衡量一個APP性能好壞混滔?直觀感受...
很早之前就想深入的研究和學(xué)習(xí)一下熱修復(fù)糙申,由于時間的原因一直拖著隙券,現(xiàn)在才執(zhí)筆弄起來宁舰。 Android而更新系列:Android熱更新一:JAVA的類加載機制Android熱更新...
系列文章 【背上Jetpack】Jetpack 主要組件的依賴及傳遞關(guān)系【背上Jetpack】AdroidX下使用Activity和Fragment的變化【背上Jetpack...
在說起Jetpack的ViewModel時喊括,我們第一反應(yīng)都會想到它就是MVVM中的VM凭需。然而這兩者并不是等價關(guān)系狸棍,Jetpack的ViewModel它只是官方為我們提供的一個...
前言 最近幾天把Jetpack中的3劍客Lifecycle+ViewModel+LiveData的使用和原理學(xué)習(xí)了一遍胆胰,這3者也是構(gòu)建MVVM模式的核心烦秩。這個系列的工具垮斯,建議...
目前關(guān)于LiveData源碼解讀的文章非常多了,本文就不重復(fù)了闻镶,這里只對核心流程做解讀甚脉。關(guān)于源碼流程,推薦:Android livedata 源碼解剖 系列文章 Androi...
感覺你說的“內(nèi)存泄漏的本質(zhì)是什么铆农?”下面的內(nèi)容確實有點問題牺氨。
LiveData.observe(owner,ovserver){
......
LifecycleBoundObserver wrapper = new LifecycleBoundObserver(owner, observer);//1
ObserverWrapper existing = mObservers.putIfAbsent(observer, wrapper);//2
......
owner.getLifecycle().addObserver(wrapper);//3
}
上面兩行確實決定了Activity/Fragment與LiveData.LifecycleBoundObserver的相互引用,(注釋1)決定了LiveData.LifecycleBoundObserver引用到Activity/Fragment墩剖,(注釋3)決定Activity/Fragment引用LiveData.LifecycleBoundObserver猴凹。
但是LiveData.LifecycleBoundObserver的detachObserver()方法的實現(xiàn)為:
LiveData.LifecycleBoundObserver.detachObserver() {
mOwner.getLifecycle().removeObserver(this);
}
它與上面注釋2對應(yīng),僅僅是讓Activity/Fragment不再引用LiveData.LifecycleBoundObserver岭皂。其實這里雖然LiveData.LifecycleBoundObserver保持著Activity/Fragment的引用郊霎,但是如果LiveData.LifecycleBoundObserver沒有被其他對象引用上,也就不能被GCRoot給鏈接上爷绘,則不會影響它的回收书劝。
同時(注釋2)處使得LiveData引用到了LiveData.LifecycleBoundObserver,于是就有了LiveData->LiveData.LifecycleBoundObserver->Activity/Fragment,這才是可能導(dǎo)致內(nèi)存泄漏的關(guān)鍵點土至。
那是什么時候斷掉這條引用鏈的呢购对?
LiveData.LifecycleBoundObserver.onStateChanged(source, event) {
if (mOwner.getLifecycle().getCurrentState() == DESTROYED) {
removeObserver(mObserver);
return;
}
}
LiveData.LifecycleBoundObserver在監(jiān)聽到Activity/Fragment DESTROYED的時候調(diào)用了LiveData.removeObserver(mObserver)。
LiveData.removeObserver(mObserver){
......
ObserverWrapper removed = mObservers.remove(observer);
......
}
在這里L(fēng)iveData直接斷掉了對LiveData.LifecycleBoundObserver的引用陶因。LiveData-/->LiveData.LifecycleBoundObserver->Activity/Fragment
到此為止LiveData.LifecycleBoundObserver->Activity/Fragment的引用關(guān)系其實一直還存在的骡苞,但是LiveData.LifecycleBoundObserver已經(jīng)是一個孤立對象,所以不影響它的回收楷扬。
Android Jetpack LiveData解析目前關(guān)于LiveData源碼解讀的文章非常多了解幽,本文就不重復(fù)了,這里只對核心流程做解讀烘苹。關(guān)于源碼流程躲株,推薦:Android livedata 源碼解剖 系列文章 Androi...
**Data Binding**顧名思義就是數(shù)據(jù)綁定然爆,2015年谷歌I/O大會上發(fā)布了DataBinding站粟,它是一個數(shù)據(jù)綁定框架,是一種對MVVM的實現(xiàn)曾雕,MVVM模式就相當(dāng)...
昨天發(fā)了一片文章《Android近期面試總結(jié)》奴烙,其實這篇文章主要還是對于自己前一段時間所做的事情的總結(jié)。對大家的價值并不是很大剖张。而有一位將要實習(xí)的同學(xué)講“先收藏切诀,到時候再來看...
注:本文章只代表個人觀點搔弄。 最近一段時間聊了一些候選人幅虑。發(fā)現(xiàn)大多數(shù)的候選人都是被一些低級又致命的失誤PASS掉的。今天整理一些顾犹,希望各位同學(xué)在這金三銀四的時間段倒庵,不要因為這些...