首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一步一步实现Android的MVP框架

所以这里我们就要介绍 Android 官方推荐的 MVP 框架,看看 MVP 是如何将 Android 项目层层分解。...简单来讲,就是 Activity 或者 Fragment 直接与数据层交互,activity 通过 apiProvider 进行网络访问,或者通过 CacheProvider 读取本地缓存,然后在返回或者回调里对...我们作一个设想,假如一次数据访问可能需要同时访问 api cache,或者一次数据请求需要请求两次 api。...从代码量上来讲,似比上一种方式要更多了,但实际上,当业务复杂度成倍增加的时候,RxJava 可以采用这种链式编程方式随意的增加调用返回,而实现方式要比前面的方法灵活得多,简洁得多。...How To Use RxJava RxJava 的使用场景远不止这些,在上面第三篇文章提到了以下几种使用场景: 取数据先检查缓存的场景 需要等到多个接口并发取完数据,再更新 一个接口的请求依赖另一个

1.5K61

Paging 3.0 简介 | MAD Skills

作为额外的好处,它还让您的应用可以支持无限的数据集合;而如果您的应用通过网络加载数据,它也支持本地缓存提供了方便。...如果您正在使用 Paging 2.0,那么 Paging 3.0 也其前任所包含的功能提供了一系列改进: 优先支持 Kotlin 协程 Flow。...支持通过 RxJava Single 或 Guava ListenableFuture 原语进行异步加载。 响应式 UI 设计提供了内建的加载状态错误信号,包括重试刷新功能。...改进仓库层,包含对于可取消的支持及简化数据源接口。 改进表现层、列表分隔符、自定义页面转换以及加载状态头、脚标。...举例来说,从基于 Github API 的页面获取 Repo 项目的 PagingSource 的声明,可以定义: /* Copyright 2020 Google LLC.

81330
您找到你想要的搜索结果了吗?
是的
没有找到

Rxjava概念初识与学习路径推荐

目前有两个版本RxJava1RxJava2,推荐使用RxJava2,RxJava1已经停止支持了 ReactiveX即Reactive Extensions,它通过可观测的序列,实现了组合异步事件驱动...,数据变化观察者立马就可以对变化做出"响应" 初识函数式编程 从java8中的stream到RxJava的转变 RxJava的一些API介绍 创建Observable的基本方式...,可以先了解最简单的just操作 了解什么是Hot Observable,什么是 Cold Observable,以及如何将Cold转换成Hot cold:每次订阅其它任何订阅它的取到的数据都是一样的...void call(User user) { LOG.info("justVerify just user age:{}", user.getAge()); } }); 复制代码...可以反过来限制生产的速度,比如把所有生产的数据都缓存起来,消费者自己来取,比如只有有请求的时候才给数据,没有请求的数据全部扔掉

54220

Android应用架构分析(转)

曾经的架构 追溯到2012年我们的代码库使用的是基本结构,那个时候我们没有使用任何第三方网络类库,而且AsyncTask也是我们的好朋友。当时的架构可以大致表示下图。...代码被划分为两层结构:Data Layer(数据层)负责从REST API或者持久数据存储区检索存储数据;View Layer(视图层)的职责是处理并将数据展示在UI上。...RxJava驱动的新型架构 我们使用上文提到的组织架构差不多两年的时间。在那段时间内,我们做了一些改进,稍微缓解了上述问题。...Retrofit services:执行访问REST API,我们现在使用Retrofit来代替Volley,因为它天生支持RxJava。而且也更好用。...这个简单的示例方法如下: 调用Retrofit service从REST API加载一个博客文章列表 使用DatabaseHelper保存文章到本地数据库,达到缓存的目的 筛选出今天发表的博客

56820

使用 Paging 3 实现分页加载

失败的加载提供简便的重试功能; 无论您是否使用 Flow、LiveData、RxJava Flowable 或 Observable,都可以对需要展示的列表使用 map 或 filter 这类常见的操作...狗狗的数据从 GoodDoggos API 获得,该 API 支持基于索引的分页。让我们研究下需要实现的 Paging 组件,以及如何将 Paging 集成到现有的应用架构。...那么您需要实现 RemoteMediator 来合并两个数据源到一个本地数据库缓存的 PagingSource 中。...由于 Paging 库并不知道您的 API 是怎样的,所以定义如何构造获取前一页下一页的远程数据的工作便需要由您自己来完成。...我们将 Paging 3 设计一个帮您涵盖简单复杂情形下的分页加载的库。它可以让您更方便地使用大规模数据集合,无论数据来自网络、数据库、内存缓存还是上述几种情况的组合。

1.7K31

Android应用架构

曾经的架构 追溯到2012年我们的代码库使用的是基本结构,那个时候我们没有使用任何第三方网络类库,而且AsyncTask也是我们的好朋友。当时的架构可以大致表示下图。 ?...代码被划分为两层结构:Data Layer(数据层)负责从REST API或者持久数据存储区检索存储数据;View Layer(视图层)的职责是处理并将数据展示在UI上。...RxJava驱动的新型架构 我们使用上文提到的组织架构差不多两年的时间。在那段时间内,我们做了一些改进,稍微缓解了上述问题。...Retrofit services:执行访问REST API,我们现在使用Retrofit来代替Volley,因为它天生支持RxJava。而且也更好用。...这个简单的示例方法如下: 调用Retrofit service从REST API加载一个博客文章列表 使用DatabaseHelper保存文章到本地数据库,达到缓存的目的 筛选出今天发表的博客,因为那才是

1.2K70

深入浅出RxJava+Retrofit+OkHttp网络请求

各自的职责:Retrofit 负责请求的数据请求的结果,使用接口的方式呈现,OkHttp 负责请求的过程,RxJava 负责异步,各种线程之间的切换。...集合Retrofit的使用就介绍完了,同样的可以发现使用起来很多重复性的代码,而且使用也不是那么简单,所以才有了下面的封装 ReTrofit+Rxjava进阶封装之路 先来一张流程图压压惊 ?.../*有网情况下的本地缓存时间默认60秒*/ private int cookieNetWorkTime=60; /*无网络的情况下本地缓存时间默认30天*/ private int cookieNoNetWorkTime...剩下的无非是初始化,显示关闭方法,可以详细看代码。 2.onStart()实现 在onStart()中需要调用加载框,然后这里还有网络缓存的逻辑,后面会单独讲解,现在先忽略它的存在。...param e */ @Override public void onError(Throwable e) { dismissProgressDialog(); /*需要緩存并且本地缓存才返回

5.8K10

RxJava +Retrofit 你需要掌握的几个实用技巧

RxJava +Retrofit 你需要掌握的几个技巧,Retrofit中OkHttp缓存,统一对有无网络处理, 异常处理,返回结果问题. ?...UI,这种情况视图已经消亡了必定会导致rxJava出错,导致App闪退,这种我们可以判断前的activity/view是否空,并是否已showing,如果 两者都不存在,即可无须更新UI。...的转义符操 Observable.Transformer 还有Func1 这样我们对服务器返回的错误状态进行了自我的处理,再稍加翻译下便可以达到用户看懂的语言 这个类我参考一叶飘舟同学的案列,我再次做了改进...: 如果你不想加入公共缓存,想单独对某个api进行缓存,可用Headers来实现,那么可以这样: ; 值得注意的是 下面的两句话也必须加入: .addInterceptor(new CacheInterceptor...Request.cacheControl的方式实现缓存,也可以自定义一个Cahe策略用来实现本地缓存

84410

关于RxJava2.0你不知道的事(一)

:2.0.1' Nulls RxJava1.x中,支持 null 值,如下代码所示: Observable.just(null); Single.just(null); RxJava 2.0不再支持 null...但这两种策略在令牌数0的时候有一点微妙的区别:onBackpressureDrop直接丢弃数据,不缓存任何数据;而onBackpressureLatest则缓存最新的一条数据,这样当上游接到新令牌的时候...现在也可以完成以前类似的代码: 注意,由于Reactive-Streams的兼容性,方法onCompleted被重命名为onComplete。...Schedulers 在2.0的API中仍然支持主要的默认scheduler: computation, io, newThread trampoline,可以通过io.reactivex.schedulers.Schedulers...例,创建一个Transformer调度器: 上面这个方法出自一叶飘舟的CommunityRxJava2框架,用法源码详见:RxHelper.java 其他改变请看下篇!

1.4K20

基于 RxJava2+Retrofit2 精心打造的 Android 基础框架 XSnow

XSnow 基于RxJava2+Retrofit2精心打造的Android基础框架,包含网络、上传、下载、缓存、事件总线、权限管理、数据库、图片加载、UI模块,基本都是项目中必用功能,每个模块充分解耦,...局部请求配置支持主机URL、请求后缀、请求头、请求参数、拦截器、本地缓存策略、本地缓存时间、本地缓存key、连接超时时间、读写超时时间的一系列配置。...GET 带缓存 ViseHttp.GET("getAuthor") .setLocalCache(true)//设置是否使用缓存,如果使用缓存必须设置true .cacheMode...,需要告知上层是否是缓存数据,所以需要外部包裹一层CacheResult结构,使用时必须要按照这种方式设置model,还有需要注意的是必须要设置缓存开关true,如果false是没法解析CacheResult...==网络访问的API调试采用的是moco服务进行处理的,项目中有提供开启该服务的命令,需要在使用时调用命令开启该服务,还有需要将应用初始化的baseurl设置本地电脑的IP地址。

1.2K70

实用的 Android 开源库整理

能够加载网络、本地数据库、本地资源中的图像,在图像加载出来之前,还能够预先设置一个预设的图像占位符,有二级缓存(内存硬盘缓存) dependencies { // your app's other...还提供了一些其他的开源库支持 Gif,WebP等 dependencies { // If your app supports Android versions before Ice Cream Sandwich (API...,封装了多媒体的解码、内存硬盘缓存,接口友好 dependencies { compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.android.support...:support-v4:19.1.0' } OkHttp OkHttp是一个Android提供 HTTP+HTTP/2 的客户端,很好的封装了对网络的请求连接 dependencies { compile...RxJava-Reactive Extensions for the JVM dependencies { compile 'io.reactivex.rxjava2:rxjava:2.0.5'

65710

MVPArms MVP快速集成框架

对于一个新的Android项目,特别是熟练使用Dagger2Rxjava的开发者,你们只需要将此项目Clone下来,Demo只实现了一个页面,将此页面删除掉,添加所需要的Retrofit API,你的框架就搭建好了...CacheManager,然后通过两个Manager拿到需要的ServiceCachePresenter提供需要的数据(是否使用缓存请自行选择,Presenter无需关心细节) public...Rxjava提供优雅的响应式Api解决异步请求以及事件处理. RxAndroidAndroid提供响应式Api....RxCache是使用注解Retrofit加入二级缓存(内存,磁盘)的缓存库. RxErroHandler 是 Rxjava 的错误处理库,可在出现错误后重试....Glide此库本框架默认封装图片加载库,可参照着例子更改为其他的库,ApiPicasso差不多,缓存机制比Picasso复杂,速度快,适合处理大型图片流,支持 gif 图片,Fresco太大了!

3.3K1815

【译】使用RxJava代替EventBus类库

使用MVP构建代码库 当我们在开发一款叫做Radyoland的无线流媒体应用的时候,我们决定使用MVP模式来设计我们的代码项目架构等。...在我们的例子中,我们认为,DataBusUIBus创建一个BusUtil就能够轻松实现层与层之间的数据传递(model, domain, presentation)。...因此,我们找到了一种摆脱所有回调函数订阅方法的思路。那就是在Android应用的代码库中引入并使用RxJavaRxAndroid。 ?...可以通过对数据流的过滤,合并,缓存或者其他操作,来达到我们的目的了。 ?...我们学到了什么 尽管RxJava用起来不是那么容易,但是当用RxJava替换掉Otto后,我们从代码库中成功移除了很多回调代码块。

70920

利用Python构建自定义报告生成器支持SEO分析实战总结

,获取所需的SEO数据,并保存到本地或内存中。...示例代码: # 示例代码:数据缓存异常处理 def cache_data(): # 示例代码:使用缓存技术缓存获取的SEO数据 # ... def handle_exceptions(...五、反思改进 1、定期评估报告生成器的效果,并根据用户反馈需求进行改进优化。 2、关注SEO领域的新技术最新动态,不断更新报告生成器中的指标分析方法。...在构建报告生成器时,需明确报告需求和内容,使用Python编写数据获取、处理报告生成的代码,注重报告的可视化和易读性,优化性能稳定性,并定期反思改进。...这些示例代码展示了如何将Python代码应用于构建自定义报告生成器的不同方面。

21740

【译】使用RxJava代替EventBus类库

使用MVP构建代码库 当我们在开发一款叫做Radyoland的无线流媒体应用的时候,我们决定使用MVP模式来设计我们的代码项目架构等。...在我们的例子中,我们认为,DataBusUIBus创建一个BusUtil就能够轻松实现层与层之间的数据传递(model, domain, presentation)。...因此,我们找到了一种摆脱所有回调函数订阅方法的思路。那就是在Android应用的代码库中引入并使用RxJavaRxAndroid。 ?...可以通过对数据流的过滤,合并,缓存或者其他操作,来达到我们的目的了。 ?...我们学到了什么 尽管RxJava用起来不是那么容易,但是当用RxJava替换掉Otto后,我们从代码库中成功移除了很多回调代码块。

40720
领券