目錄介紹
感知生命週期
自動解除資料訂閱
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...