LiveData詳細分析

2021-10-03 13:25:17 字數 2156 閱讀 8858

目錄介紹

感知生命週期

自動解除資料訂閱

2.1 具有很明顯的優點

不會發生記憶體洩露

不會再產生由於activity處於stop狀態而引起的崩潰

不需要再解決生命週期帶來的問題

實時資料重新整理

解決configuration change問題

資料共享

2.2 細節點補充4.1 單獨使用livedata

4.2 使用livedata配合viewmodel

private void initlivedata() 

};// 通過 observe()方法連線觀察者和livedata,注意:observe()方法需要攜帶乙個lifecycleowner類

model.getcurrenttext().observe(this, nameobserver);

}

然後去建立更新物件資料內容的物件。如何去更新那個文字中的資料呢?**如下所示:

findviewbyid(r.id.tv_click).setonclicklistener(new view.onclicklistener() 

model.getcurrenttext().setvalue(text);

}});

當然我們也可以使用 livedata 的 observerforever() 方法進行訂閱,區別是 observerforever() 不會受到 activity 等元件的生命週期的影響,只要資料更新就會收到通知。

6.1 簡單的原理介紹

6.2 然後思考一些問題7.1 首先看看observe方法原始碼

@mainthread

public void observe(@nonnull lifecycleowner owner, @nonnull observerobserver)

//建立生命週期感知的觀察者包裝類

//如果指定的鍵尚未與某個值關聯,則將其與給定的值關聯

//對應觀察者只能與乙個owner繫結

if (existing != null && !existing.isattachedto(owner))

if (existing != null)

//lifecycle註冊

//新增乙個lifecycleobserver,它將在lifecycleowner更改狀態時得到通知

}

7.2 看看lifecycleboundobserver原始碼

if (wasinactive && mactive) 

if (livedata.this.mactivecount == 0 && !mactive)

7.3 看看mobservers.putifabsent操作

看了下面源**可知,支援鍵值對儲存,用鍊錶實現,不是執行緒安全的。既然這裡有存資料,那肯定有地方會取資料用到,這個後面會說到……

//mobservers是乙個集合

new safeiterablemap<>();

//在safeiterablemap類中的putifabsent方法

public v putifabsent(@nonnull k key, @nonnull v v)

put(key, v);

return null;

}protected entryput(@nonnull k key, @nonnull v v)

mend.mnext = newentry;

newentry.mprevious = mend;

mend = newentry;

return newentry;

}

7.4 註冊觀察者流程

8.1 setvalue原始碼分析

8.2 看一下considernotify()做什麼

8.3 傳送訊息事件流程

@mainthread

public void observeforever(@nonnull observerobserver)

if (existing != null)

//重新整理資料

}

const詳細分析

最近在分析 linux 驅動的過程過程中遇到一些關於 const 的使用,現在在這裡詳細剖析一下 一,const int p 首先分析一下幾個概念 1 p 是乙個指標變數,因而它也是乙個變數,所謂變數就有變數的位址和變數的值,而這裡 p變數的值就是乙個位址,該位址下存放的是乙個整數,p的值等於這個整...

約數詳細分析

約數詳細分析 我們先來認識一下約數 約數分正約數和負約數兩種,我們一般只討論正約數。也就是說,接下來所提的約數,只考慮正約數。如果有乙個數k,滿足k n,那麼k就是n 的約數 因數 n是k的倍數。求乙個數的約數是資訊學競賽裡乙個基礎的不能再基礎的問題。如果只求乙個數,最容易想到的就是列舉。當然列舉也...

vue cli 詳細分析

vue lic 是 vue 官方提供的腳手架工具,預設搭建好乙個專案的基本架子,我們只需要在此基礎上進行相應的修改即可。注意 安裝 vue cli 前需要事先配置好 node 環境 npm install g vue cli 如果是 mac 電 sudo表示以管理員的許可權 sudo install...