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.mzph.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;如果需…