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,也可以掃碼進群。我在這里期待你們的加入!!!


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282960.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282960.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282960.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.NET Framework 4.8預覽

雖然人們的大多數關注點都在.NET Core上&#xff0c;但經典的.NET Framework仍然在開發中。.NET 4.8的“早期訪問”預覽版表明了微軟最關心的領域包括高DIP、可訪問性和并發性。\\.NET 4.8預計將于2019年發布。目前的預期是&#xff0c;它將在稍后的Windows 10 build 1607上運行…

java項目商品的排名,分析了5萬個開源項目,得出的排名前16的Java工具類

原文:https://www.jianshu.com/p/9e937d178203在Java中&#xff0c;工具類定義了一組公共方法&#xff0c;這篇文章將介紹Java中使用最頻繁及最通用的Java工具類。以下工具類、方法按使用流行度排名&#xff0c;參考數據來源于Github上隨機選取的5萬個開源項目源碼。一. org.ap…

IDEA遠程調試

參考鏈接&#xff1a;http://www.cnblogs.com/wy2325/p/5600232.html 調試端口是catlina.sh中的 JAVA_OPTS-agentlib:jdwptransportdt_socket,servery,suspendn,address5023 -Xms1024m -Xmx3072m -XX:MaxNewSize128m #!/bin/sh 配置的端口&#xff0c;是address ******&#…

ASP.NETCoreWeb開發之OptionsPattern

這節我們來講一下&#xff0c;在ASP.NET Core Web開發中&#xff0c;讀取配置文件信息的新方式&#xff1a;Options。前言 /Options在ASP.NET Web框架中&#xff0c;我們讀取配置文件中的數據&#xff0c;在不使用第三方框架的情況下&#xff0c;可能需要通過ConfigurationMana…

SpringMVC執行流程圖

2019獨角獸企業重金招聘Python工程師標準>>> 轉載于:https://my.oschina.net/u/2607324/blog/827946

CC框架實踐(1):實現登錄成功再進入目標界面功能

在掘金上看到這篇文章&#xff1a;android 關于先登錄成功后再進入目標界面的思考,作者對實現登錄成功后再跳轉到目標界面功能作了比較詳細的分析&#xff0c;對比了一些已有的實現方案并指出存在的問題。最終&#xff0c;作者實現了一個可同時添加多個條件判斷攔截的方案&…

yum search php7,yum install php7 in centos6

如果有安裝的PHP包&#xff0c;先刪除他們yum list installed | grep phpyum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64yum 安裝我們需要的軟件1.安裝epel軟…

CentOS 7系統安裝配置圖解教程

操作系統&#xff1a;CentOS 7.3 備注&#xff1a; CentOS 7.x系列只有64位系統&#xff0c;沒有32位。生產服務器建議安裝CentOS-7-x86_64-Minimal-1611.iso版本 一、安裝CentOS 7.3 成功引導系統后&#xff0c;會出現下面的界面 界面說明&#xff1a; Install CentOS 7 #安裝…

這份《.NET/C#面試手冊》超神啦!

這幾天給.neter們整理了一份《.NET/C#面試手冊》&#xff0c;目前大約4萬字左右&#xff0c;初衷也很簡單&#xff0c;就是希望在面試的時候能夠幫助到大家&#xff0c;減輕大家的負擔和節省時間。對于沒有跳槽打算的也可以復習一下相關知識點&#xff0c;就當是查缺補漏&#…

Dinic算法----最大流常用算法之一

——沒有什么是一個BFS或一個DFS解決不了的&#xff1b;如果有&#xff0c;那就兩個一起。 最大流的$EK$算法雖然簡單&#xff0c;但時間復雜度是$O(nm^2)$&#xff0c;在競賽中不太常用。 競賽中常用的$Dinic$算法和$SAP$&#xff0c;其實也不太難。 那么&#xff0c;$Dinic$算…

springcloud~Eureka實例搭建

服務端 build.gradle配置 dependencies {compile(org.springframework.cloud:spring-cloud-starter-netflix-eureka-server)testCompile(org.springframework.boot:spring-boot-starter-test) }dependencyManagement {imports {mavenBom "org.springframework.cloud:sprin…

php5.3教程,Php 5.3發布

PHP 5.3.4 特性&#xff1a; 增加對zip 流的統計支持 新增 follow_location (默認啟用)支持 增加一個 3rd parameter to get_html_translation_table Implemented FR #52348, added new constant ZEND_MULTIBYTE to detect zend multibyte at runtime. Multiple improvements t…

javascript學習筆記 null和undefined

null是javascript語言的關鍵字&#xff0c;它表示一個特殊值&#xff0c;常用來描述“空值”。對null執行typeof預算&#xff0c;結果返回字符串“object”&#xff0c;也就是說&#xff0c;可以將null認為是一個特殊的對象值&#xff0c;含義是“非對象”。但實際上&#xff0…

C# 為什么高手都是用IsNullOrWhiteSpace對字符串判空?

判斷字符串為空有好幾種方法&#xff1a;方法一&#xff1a; 代碼如下&#xff1a;static void Main(string[] args){string str "";if (str ""){Console.WriteLine("a is empty"); ;}Console.ReadKey();}運行結果&#xff1a;a is empty這樣…

使用bcftools提取指定樣本的vcf文件(extract specified samples in vcf format)

1、下載安裝bcftools。 2、準備樣本ID文件&#xff0c;這里命名為samplelistname.txt&#xff0c;一個樣本一行&#xff0c;如下所示&#xff1a; sample1 sample2 sample3 3、輸入命令&#xff1a; bcftools view -S samplelistname.txt /1000genomes/ALL.chr16.phase3_shapei…

iostat相關參數說明——await:平均每次設備I/O操作的等待時間 (毫秒),如果%util接近 100%,說明產生的I/O請求太多...

iostat是I/O statistics&#xff08;輸入/輸出統計&#xff09;的縮寫&#xff0c;iostat工具將對系統的磁盤操作活動進行監視。它的特點是匯報磁盤活動統計情況&#xff0c;同時也會匯報出 CPU使用情況。同vmstat一樣&#xff0c;iostat也有一個弱點&#xff0c;就是它不能對某…

php里面sql是什么意思,MySQL和SQL是什么?MySQL和SQL之間的區別有哪些

MySQL和SQL之間的區別有哪些&#xff1f;很多PHP的初學者&#xff0c;對MySQL&#xff0c;MyAdmin和SQL有什么區別并不是很清楚&#xff1f;下面 第一PHP社區 就帶領大家來學習一下MySQL和SQL之間的區別。【推薦閱讀&#xff1a;MySQL什么意思】一&#xff1a;什么是SQLSQL是一…

Blazor University (51)依賴注入 —— 擁有多個依賴項:錯誤的方式

原文鏈接&#xff1a;https://blazor-university.com/dependency-injection/component-scoped-dependencies/owning-multiple-dependencies-the-wrong-way/擁有多個依賴項&#xff1a;錯誤的方式OwningComponentBase[1] 類是一個合適的解決方案&#xff0c;當我們需要我們的組件…

Centos的yum源更換為國內的阿里云源

1、備份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下載新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo 或者 curl -o /etc/yum.repo…

Centos 7 搭建.net web項目

現在的.NET Core 1.0版本是一個很小的核心&#xff0c;APIs和工具也并不完整&#xff0c;但是隨著.Net Core的不斷完善&#xff0c;補充的Apis和創新也會一起整合到.NET Framework中。 安裝centos系統 請自行安裝或百度教程 安裝 libicu包 和 dotnet 溫馨提示&#xff1a;如果需…