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

Android 应用架构演变

代码被划分为两层结构:Data Layer(数据层)负责从数据源获取和存储数据;View Layer(视图层)负责处理并将数据展示在UI上 DataProvider提供一些方法,使Activity和Fragment...这些方法使用AsyncTask在一个单独的线程内执行耗时操作(网络请求、数据库操作等),然后通过回调将结果返回给Activity或Fragment。...MVC(来自Java Web) 随着界面越来越多,业务越来越复杂,开发人员开始考虑架构设计,本身Android就是Java语言编写的,所以自然就首先考虑原来Java Web端成熟的设计方案MVC...是对MVC的改进,让Model和View完全解耦 优点 Model与View不存在直接关系 Presenter与View、Model的交互使用接口定义交互操作进一步达到松耦合也可以通过接口更加方便地进行单元测试...要实现MVVM的ViewModel就需要把数据与UI进行绑定,节点就为此提供了一个桥梁,我们先在中声明一个variable,这个变量会为UI元素提供数据(例如TextView的android

1.3K20

Android 单元测试和 UI 测试初步实践

环境下才能运行 接下来,笔者将尝试为自己的项目(基于 MVP 架构开发)补充相应的单元测试和 UI 测试用,来初步实践下如何在 Android 平台编写和运行相关的测试用。...Android 单元测试实践 创建新用 如果需要编写一个新的本地单元测试,只需打开你想测试的 java 代码文件,然后点击类名 – ⇧⌘T(Windows:Ctrl+Shift+T)– 选择要生成的方法...至此,一个 Android 的单元测试编写完成。通过 Android Studio 直接运行此单元测试,结果如下: ?...至此,一个 Android 的 UI 测试用编写完成。通过 Android Studio 直接运行此,结果如下: ?...笔者认为编写 Android 的测试用的大致流程如下: 确定需要编写的测试用粒度; 分析针对需要测试的页面,提取出较为重要且简短的业务代码逻辑; 根据这些逻辑,通过三步走(初始化–执行–验证)方法来设计测试用

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

Android组件化搭建

我总结了好几点: 1.各自负责业务模块独立开发,以application进行开发,后期再以library引入项目 2.因为每个模块独立出来,以最小模块的进行开发,编译速度快 3.有利于单元测试,对业务模块进行单元测试...现在的问题,不同模块的activity怎么跳转,以前我的做法都会在每个activity中写一个静态方法,把入参设定好. ?...Arouter具体的使用方法: https://github.com/alibaba/ARouter Retrofit+Rxjava+MVP模式 关于Retrofit跟RxJava,具体详细的用法就不在这里介绍...图中的ApiFactory的职责是提供所有业务Api接口,具体提供的Api是通过接口ApiProvider提供每个业务接口,如果用户接口,交易接口,令牌接口等,ApiFactory通过单,获取api提供者...跟presenter解绑后网络请求未来得及返回处理,容易出现view空指针的操作。

95170

Android应用架构分析(转)

这些方法使用URLConnection和AsyncTask在一个单独的线程内执行网络请求,然后通过回调将结果返回给Activity。...单元测试变得非常有挑战性,如果有可能的话,因为很多逻辑都留在了Activity或者Fragment中,这样进行单元测试是很艰难的。...帮助类里面的大多数public方法都会返回RxJava的Observable。 DataManager是整个架构中的大脑。它广泛的使用了RxJava的操作符用来合并,过滤和转换从帮助类中返回的数据。...Presenter负责从Model中加载数据,然后当数据准备好之后调用View中相对应的方法。还负责订阅DataManager返回的Observable。...现在我们通过模拟View Layer可以很容易的编写单元测试。之前这些代码是View Layer的一部分,所以我们很难对它进行单元测试。整个架构变得测试友好。

57920

Android应用架构

这些方法使用URLConnection和AsyncTask在一个单独的线程内执行网络请求,然后通过回调将结果返回给Activity。...单元测试变得非常有挑战性,如果有可能的话,因为很多逻辑都留在了Activity或者Fragment中,这样进行单元测试是很艰难的。...帮助类里面的大多数public方法都会返回RxJava的Observable。 DataManager是整个架构中的大脑。它广泛的使用了RxJava的操作符用来合并,过滤和转换从帮助类中返回的数据。...Presenter负责从Model中加载数据,然后当数据准备好之后调用View中相对应的方法。还负责订阅DataManager返回的Observable。...现在我们通过模拟View Layer可以很容易的编写单元测试。之前这些代码是View Layer的一部分,所以我们很难对它进行单元测试。整个架构变得测试友好。

1.2K70

Android 中构建快速可靠的 UI 测试

在这篇文章中,我们会探索如何使用Mockito(译者注:Mockito是java编写的一个单元测试框架),Dagger 2 去创建快速可靠的Android UI测试。...它主要应用于编写单元测试,但在UI测试中也会非常有用。你可以参照不同的方法去模拟java对象但使用Mockito 确实是一个简单有效的解决方案。...loadUsername()方法使用Retrofit和Rxjava 去加载REST API 的数据。它返回的是Single 对象,并且发送一串字符串。...如果你不使用mock来编写上面的三个,几乎不可能达到这样的效果因为真实的API接口总会返回同样的数据。...其中也有380个Model层和Presenter层的单元测试。 好了,我希望这篇文章让你对UI测试的认知以及编写更好的测试代码有一个很好的帮助。

91710

【翻译】忘了RxJava吧——你需要的是拥抱Kotlin协程(Part 12)

这看上去根本没有产生异步嘛 :) ,顺便说一下,在 RxJava 版本中,我们把订阅器添加到 compositeDisposable 中以方便在 onStop() 中调用它的 dispose() 方法。...在协程版本中,我们保存为 job ,然后在同一个地方调用 job.cancel() 方法。请继续关注我即将发表的文章中有关生命周期和协程的更多信息!...可读性 代码更易于阅读和编写了,这是由于异步代码是使用同步方式编写出来的。 我该如何重构单元测试?...使用 RxJava ,我们使用以下代码做单元测试: @Test fun login() { val apiClientImpl = ApiClientRx.ApiClientRxImpl() val...我们可以在我们的业务逻辑对象中抛弃任何包装器,不需要返回 Deferred 包装对象,假装没有任何实际的异步操作发生。

1.1K20

Android通用流行框架汇总

数据库 名称 描述 OrmLite JDBC和Android的轻量级ORM java包 Sugar 超级简单的方法处理Android数据库 GreenDAO 一种轻快地将对象映射到SQLite数据库的...依赖注入 名称 描述 ButterKnife 将Android视图和回调方法绑定到字段和方法上 Dagger2 一个Android和java快速依赖注射器。...响应式编程 名称 描述 RxJava JVM上的响应式扩展 RxJavaJoins 为RxJava提供Joins操作 RxAndroid Android上的响应式扩展,在RxJava基础上添加了Android...线程调度 RxBinding 提供RxJava绑定Android UI的API Agera Android上的响应式编程 ---- 12....测试框架 名称 描述 Mockito Java编写的Mocking单元测试框架 Robotium Android UI 测试 Robolectric Android单元测试框架 Android自带很多测试工具

93730

CC++ 单元自动化测试解决方案实践

那么我们是不是可以通过改善编写单元测试的效率来提升项目的测试用覆盖率? 本文主要介绍如何利用GCC插件来实现提升C/C++开发者的单元效率工具解决方案,希望对大家在提升单元测试效率上有所启发。...对于一些private、protected的类方法编写单元测试的效率就更低,需要手动打桩(mock)。...同时我们分析测试用发现,存在很多边界的,它们基本上都是很固定或者有一定模式,比如int 最大最小值等。 如何改善编写单元测试的效率,提升C/C++同学开发效率以及程序质量?...五、使用TU的优点 接入简单、边界单元测试可以做到业务代码0修改 函数参数可边界值实现全排列,大大降低遗漏风险、减少大量重复性的工作 快速生成用户自定义、mock方法等 六、TU支持的功能...TU解决方案目前在构建时能够自动生成测试用已经极大降低了单元测试门槛提升单元测试覆盖率,未来我们也希望能够把TU与IDE相结合,探索更高效便捷的使用方式,通过更加便捷的方式生成指定方法的测试用

1.5K30

【Dev Club分享】基于RxJava的一种MVP实现

这里我想提到之前讨论过的单元测试问题,很多同学反馈项目开发过程中没有做过,或者没有时间精力去做单元测试,或者因为业务变化太大导致无法做单元测试。...取数据先检查缓存的场景 需要等到多个接口并发取完数据,再更新 一个接口的请求依赖另一个API请求返回的数据 界面按钮需要防止连续点击的情况 响应式的界面 复杂的数据变换 上面这些功能都可以通过RxJava...Q14:activity与p层接口的方式衔接的价值在哪?另外如何界定展现方法在哪调用?比如页面需要显示一个标题,内容是从之前页面传过来的,那是在activity接收后就直接显示?...Q16:rxjava怎么实现队列像handler message那样,就是队列执行,不是并发执行? rxJava中的just方法和from方法都是以队列形式发出事件。...我猜你想问的问题可能是:一个接口的请求依赖另一个API请求返回的数据,这就是嵌套回调问题。可以找下大头鬼Bruce的一篇文章,《RxJava使用场景小结》,里面有介绍的,这里不详细讨论了。

94270

15 个 Android 通用流行框架大全

数据库 名称 描述 OrmLite JDBC和Android的轻量级ORM java包 Sugar 超级简单的方法处理Android数据库 GreenDAO 一种轻快地将对象映射到SQLite数据库的...依赖注入 名称 描述 ButterKnife 将Android视图和回调方法绑定到字段和方法上 Dagger2 一个Android和java快速依赖注射器。...响应式编程 名称 描述 RxJava JVM上的响应式扩展 RxJavaJoins 为RxJava提供Joins操作 RxAndroid Android上的响应式扩展,在RxJava基础上添加了Android...线程调度 RxBinding 提供RxJava绑定Android UI的API Agera Android上的响应式编程 12....测试框架 名称 描述 Mockito Java编写的Mocking单元测试框架 Robotium Android UI 测试 Robolectric Android单元测试框架 Android自带很多测试工具

1.3K20

15 个 Android 通用流行框架大全

html或嵌套html的方式 Jsoup 一个以最好的DOM,CSS和jQuery解析html的库 6 数据库 名称 描述 OrmLite JDBC和Android的轻量级ORM java包 Sugar 超级简单的方法处理...SQLiteOpenHelper 和ContentResolver的轻量级包装 Realm 移动数据库:一个SQLite和ORM的替换品 7 依赖注入 名称 描述 ButterKnife 将Android视图和回调方法绑定到字段和方法上...JVM上的响应式扩展 RxJavaJoins 为RxJava提供Joins操作 RxAndroid Android上的响应式扩展,在RxJava基础上添加了Android线程调度 RxBinding...提供RxJava绑定Android UI的API Agera Android上的响应式编程 12 Log框架 名称 描述 Logger 简单,漂亮,强大的Android日志工具 Hugo 在调试版本上注解的触发方法进行日志记录...Timber 一个小的,可扩展的日志工具 13 测试框架 名称 描述 Mockito Java编写的Mocking单元测试框架 Robotium Android UI 测试 Robolectric

1.4K60

单元测试让你的python代码更靠谱测试函数单元测试和测试用测试类

单元测试和测试用 Python 标准库中的模块 unittest 提供了代码测试工具。...单元测试 用于核实函数的某个方面没有问题; 测试用 是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求。良好的测试用考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试。...全覆盖式测试 包含一整套单元测试,涵盖了各种可能的函数使用方式。对于大型项目,要实现全覆盖可能很难。通常,最初只要针对代码的重要行为编写测试即可,等项目被广泛使用时再考虑全覆盖。...可通过的测试 创建测试用的语法需要一段时间才能习惯,但测试用创建后,再添加针对函数的单元测试就很简单了。...要为函数编写测试用,可先导入模块 unittest 以及要测试的函数,再创建一个继承 unittest.TestCase 的类,并编写一系列方法对函数行为的不同方面进行测试。

1.1K50

体验RxJava和lambda

源码仅用来参考,建议自己把代码写出来,才能印象深刻; 准备工作之一:日志 我在创建工程的时候,并没有创建java工程再把jar包引进来,而是intellij idea创建了maven工程,读者们可以自己喜欢的方式来做...验证代码是通过单元测试实现的,pom文件中,对单元测试的依赖为: junit junit...来实现,事件完成的回调用Action0,Action0的特点是方法没有返回,对于的这些Action,observable.subscribe方法提供了各种重载,我们可以按照自己需要来决定使用哪种,传入哪些...Func1接口的实现,由于此接口只声明了一个方法,所以这里被简化成了lambda表达式,lambda表达式的入参由just的入参类型推断而来,是int型,返回的是字符串,后面的代码就可以直接String...型的消费者来处理事件了; 更自由的变换 map方法提供了一对一的映射,但是实际场景中未必是一对一的,例如一个int数字要发起两个String事件,map就不合适了,RxJava还有个flatMap方法

1K60

当Vert.x符合Reactive eXtensions(Vert.x简介的第5部分)

代码来建模这个世界是极具挑战的。作为开发人员,我们倾向于使用反直觉方法。自20世纪80年代以来,面向对象计算被视为高招。来自我们世界的每个实体都由一个包含字段和曝光法的对象来表示。...RxJava是Java中反应式库的通用语言,它提供以下五种类型来描述发布者: 流中的项目数 RxJava 2种类型 RX签名 回调签名 未来的签名 通知,数据流 0..N 可观察,可流动 Observable...注入的实例提出了以前缀开头的新方法,如或。以前缀为前缀的方法返回RxJava 2类型,如or 。...让我们返回更适合类型的方法替换这些方法:ActionHelperHandler private static BiConsumer writeJsonResponse(...在这篇文章中,我们调整了我们的代码,使用反应式编程和RxJava 2. Vert.x和RxJava的组合将您的反应性带到了另一个层次。您可以非常轻松地编写和处理异步操作和流。

2.6K20

RxAndroid从零开始学习之一(RxJava的简单Demo)

打算一段时间将这个知识点从零开始学起。 至于RxAndroid其实只是RxJava的一个扩展,它在RxJava的基础上添加了一些针对Android系统的新API。...因为我是在Android系统上编写代码测试,所以我就将之称呼为RxAndroid了。其实大多讲得基本上都是RxJava的知识点。这点需要大家注意。...本人偏向于实用主义,不想开山立作去详尽解释RxAndroid中具体的语法,只想通过自己编写的demo去一个一个验证知识点 好吧。开始。...需要注意的是,当call()中subscriber处理完所有的事件后,需要发送onCompleted()或者onError()方法来终结此次任务 好了,今天的任何到此为此,没有什么学习量,我们一步一步来...,把那些知识要点在未来日子中一个一个地拿下。

2.4K30

2017 年你不能错过的 Java 类库

RxJava – JVM的响应式编程扩展 – 是一个为Java虚拟机编写的使用可观察序列的构建异步的基于事件的程序的类库。...RxJava最常见的一个用法就是在后台线程运行一些计算和网络请求,而在UI线程显示结果(或者错误): ?...MBassador的高性能的核心是一个专业的数据结构,它提供了非阻塞的读取器,并最小化写入器的锁争,因此并发读写访问的性能衰减会是最小的。...参数提供类可以拥有尽可能多的参数提供方法,这样你可以给不同的进行分类。...标有@Inject注解的字段会被自动注入,不需要担心会遗忘掉它们 使得将对象连接在一起变得容易,因此你可以将一个单元测试变成集成测试的一部分 ?

1.5K10
领券