日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TODO-MVP-Loaders源码体验

發布時間:2023/12/9 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TODO-MVP-Loaders源码体验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是蒼王。

以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。

[Android]如何做一個崩潰率少于千分之三噶應用app--章節列表

相信有關注我的人,都會看過我上一編介紹的Todo-mvp源碼體驗,這是基礎編。

這個系列的課程適合研發有Android有一年半左右的同學參考。

今天介紹的TODO-MVP-Loaders是Todo-mvp的進階編。

可以對比一下這兩個結構的圖


todo-mvp架構圖
todo-mvp-loaders架構圖

對比兩個圖,可以看出會多出一個LOADER的加載模塊,這個loader的作用是用來做什么呢?

loader是android 3.0后的一種異步數據加載機制,中文意思系加載器,可以理解為將我們想要的數據加載到一個相應的容器里面,即使Activity或者Fragment的周期中被打斷,也不用利用的機制恢復現場,直接使用Loader的機制。

這里TODO-MVP-Loaders里面的設計關系圖示


loaderManager圖示

這里就是TaskLoader的觸發運行原理了。每一個Activity/Fragment都有一個LoaderManager,而且只有這個LoaderManager可以管理與Actvity/Fragment相關聯的Loader,Fragment調用的LoaderManager實際上也還是依附的Activity里面的。

LoaderManger生命周期和Activity和Fragment的生命周期是有關聯的。

想深入了解LoaderManager和Loader生命周期,可以閱讀深入源碼解析Android中Loader、AsyncTaskLoader、CursorLoader、LoaderManager。

這個MVP的架構關鍵點當然就是loader了,很多入門不久的Android工程師,不一定會接觸過loader。

從查看源碼中我們可以看到里面調用TaskLoader


TaskLoader

看一下Google官網對AsyncTaskLoader的介紹

If you need UI changes after data is loaded - AsyncTask might server you better, especially if you are working with fragments, but remember to handle activity configuration changes.

意思是說,你向數據加載完成之后ui改變,異步任務更適合,但是你需要寫代碼去處理activity的配置改變帶來的影響

google文檔中關于Loader的說法:

Introduced in Android 3.0, loaders make it easy to asynchronously load data in an activity or fragment. Loaders have these characteristics:

1、They are available to every Activity and Fragment. //支持Activity和Fragment

2、They provide asynchronous loading of data. //異步加載(就是異步任務來完成的)

3、They monitor the source of their data and deliver new results when the content changes. //當數據源改變時能及時通知客戶端(自己特有的)

4、They automatically reconnect to the last loader’s cursor when being recreated after a configuration change. Thus, they don’t need to re-query their data. //發生configuration change時自動重連接(自己特有的)

查看里面的AsyncTaskLoader的源碼,其繼承于Loader,里面內部類是一個AsyncTask實現runnable的接口,用于單一任務,<D>用于基礎的單一任務類,在TaskLoader里面是輸入Task的對象。


圖示如


TaskLoader是繼承于的AsyncTaskLoader,然后AsyncTaskLoader包含了自己的AsyncTask,AsyncTaskLoader繼承于Loader對象,而Activity/Fragment是通過LoaderManager來管理Loader。

首先構造函數中添加數據源的引用。其次重寫如下方法

loadInBackground:主要是進行異步加載數據的,在其中,我將數據源的數據return出來了。


mRepostory上一節也有提到,是數據源獲取的統一接口。TaskLoader初始化的時候也初始化。


deliverResult:則是真正的返回數據。


以下為一對。

onStartLoading:生命周期,在創建時成立。


onStopLoading:生命周期,在結束時調用。

onReset:重置


這里TaskLoader還加入了TasksRepository.TasksRepositoryObserver的接口onTasksChanged

那什么時候開始我們會啟動我們的TaskLoader呢?

首先要加載LoaderManager


然后再Fragment onResume中初始化Presenter


然后通過LoaderManager.LoaderCallbacks創建loader使用自定義的TaskLoader


然后再onLoadFinished中加載已經完成的數據。


使用這個優勢在于

1.可以異步加載數據,并監聽數據變化。

2.LoaderManager是Activity/Fragment內置的,而且使用v4的庫就可以兼容

3.就算Activity/Fragment發生configuration change時自動重連接

4.任務可以是使用對象封裝


對TODO-MVP-Loaders的介紹就到這里

下一節,將會介紹todo-databinding,敬請期待。

我建立了一個關于Android架構學習的群,里面可以進一步進行組件化學習和架構思想的的交流。

群號是316556016,也可以掃碼進群。我在這里期待你們的加入!!!


總結

以上是生活随笔為你收集整理的TODO-MVP-Loaders源码体验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。