简单聊聊android architecture componets -pg电子游戏网站

0顶
1踩

简单聊聊android architecture componets

2017-05-19 17:25 by 副主编 jihong10102006 评论(0) 有5016人浏览
google io大会进行中,本次大会android最大的新闻当属android o以及kotlin被官方认可。我发现了原来还有发布官方的架构库,以及推荐使用指南,分享给大家。

架构原则
  • 关注分离
  • 模型驱动ui,优先持久化模型
新架构

如上图所示,为新的架构模式:

activity/fragment

ui层,通常是activity/fragment等

监听viewmodel,当viewmodel数据更新时刷新ui

监听用户事件反馈到viewmodel。

viewmodel

持有保存,或者想repository来获取ui层需要的数据

响应ui层的事件,执行响应的操作

响应变化,并且通知到ui层

repository

app的完全的数据模型,viewmodel交互的对象

提供简单的数据修改和获取的接口

配合好网络层数据的更新与本地持久化数据的更新,同步等

data source

包含本地的数据库等,网络api等

这些基本上和现有的一些mvvm,以及clean架构的组合比较相似,不过谷歌提供了一些新的类库来帮助我们实现这个架构。

谷歌的新玩具

本地io大会谷歌提供了新的类库来实现这个功能,小标题我写新玩具是因为这个库目前还在alpha1版本,官方只建议在个人小项目中使用。

这个类库包含如下一些东西:

lifecycle

android声明周期的回调,帮助我们将原先需要在onstart()等生命周期回调的代码可以分离到activity或者fragment之外。

livedata

一个数据持有类,持有数据并且这个数据可以被观察被监听,和其他observer不同的是,它和lifecycle是绑定的。

viewmodel

用于实现架构中的viewmodel,同时是与lifecycle绑定的,使用者无需担心生命周期。方便在多个fragment之前分享数据,比如旋转屏幕后activity会重新create,这时候使用viewmodel可以方便使用之前的数据,不需要再次请求网络数据。

room

谷歌推出的一个sqlite orm库,不过使用起来还不错,使用注解,极大简化数据库的操作。

框架补充

工具库帮助我们进行开发,如果不满足官方的库其实可以自己实现。比如livedata在某些情况下可使用rxjava代替。

​ 数据层官方推荐使用room或者realm或者其他sqlite orm等都可以,同时从某些方面看room风格很像retrofit。网络请求也被推荐使用retrofit。

​ 各层之间的耦合推荐使用服务发现(service locator)或者依赖注入(di),会上推荐了dagger。

测试

​ 各层之间的合理分层,为测试提供极大的方便。

ui层测试

​ 使用android instrumentation test,借助espresso库进行,借助mock的viewmodel,可以专注于测试ui

viewmodel 测试

​ 使用mock的repository来提供数据,使用junit测试,因为不涉及ui,运行速度会快很多。

repository测试

​ 数据层mock一些数据返回给repository,使用junit测试即可

数据层测试

​ 使用junit测试

​ 数据库,使用room的话官方提供了测试支持,在测试时候创建内存数据库即可。

​ 网络请求,使用mockwebserver来提供假的服务端即可。

再补一个会议时的项目结构图,以一个用户信息页面为例。

最后的话

目前这个库还不完善,api可能随时会变,公司项目不建议使用,个人项目可以尝鲜。另外对于已经有的项目,也不建议更换到现在的架构。不过这个项目的好的思想可以借鉴到我们自己的项目中来,同时这个库的方式我们其实可以借助其他的开源库来实现。
本文不再贴相关代码,具体各个库的使用请查看官方文档
附上官方的demo项目:
  • 大小: 131.6 kb
  • 大小: 100.3 kb
来自:
0
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • android clean架构用kotlin编写的一个基本示例android应用程序,以非常简单的方式了解clean architecture。 只需克隆,构建,运行和理解即可。建筑学结构截屏二手图书馆:随意提交任何类型的问题和建议,以提高编码...

  • 浅谈android architecture components浅谈android architecture components 简介 android architecture components gradle 集成 lifecycles livedata transformations viewmodel room entities entity的参数 primary...

  • 上一篇咱们聊到了android architecture components系列之lifecicle,优雅解决了activity生命周期方法的分离。不过也仅此而已,它并不是一种app架构方案,而我们今天的主角livedata和viewmodel则是一种官方的、稳定的...

  • 我所能理解的 android architecture components 写在前面: android architecture components 是 google 2017 年 i/o 大会提出的一种架构pg电子游戏网站的解决方案。在此之前,android 应用大多数以 mvc mvp mvvm 等比较常见的架构...

  • android architecture components是谷歌在google i/o 2017发布的。官方的描述: a new collection of libraries that help you design robust testable and maintainable apps. 全新的库集合,可帮助您设计稳健...

  • android jetpack components of lifecycle 学习笔记 android jetpack components of livedata 学习笔记 android jetpack components of viewmodel 学习笔记 都说天下文章一大抄。不过我不担心,我从来不抄袭...

  • architecture components lifecycle 是 2107 年 google 大会推出来的,它属于 architecture compoment 里面的一个组件,它可以干什么用呢? 简单得来说,它可以用来检查 activity 的生命周期,而不必强依赖 ...

  • 在android架构组件基础上,融入kotlin 协程 retrofit,模拟网络,全面快速开发。 navigation navcontroller在 navhost 中管理应用导航的对象,沿导航图中的特定路径导航至特定目标,或直接导航至特定目标。 首先,...

  • 关于jetpackjetpack是一个类库(libraries)、工具(tools)、帮助快易开发构建令人满意的android app的指导(architectural guidance)集合,它提供了通用的基础代码(code),这样你可以专注于让你app与众不同的工作。...

  • 写给 android 开发者的混淆使用手册 - android - 掘金 本文转自:点击打开链接 毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆。 首先,这里说的的混淆其实是包括了...

  • 拿过省大学生数学竞赛三等奖,毕业后自学 android 开发,写了近三年博客,热爱写代码 =分割线= 英文简历 =分割线= lisi phone: 86 123-4567-8910 email:lisi623@163.com blog:https://lisi.com github:...

  • 也有朋友想了解新加坡it现状和薪酬情况,我觉得三言两语可能无法完全讲清楚,就干脆写几篇文章来详细聊聊。 新加坡互联网发展程度比不了美国及国内,公司也没有美国和国内那么多, 没有硅谷的巨头faang(facebook,...

  • 活动信息主题:android 11 meetup: kotlin 协程和 jetpack architecture components时间:2020年7月25日 14:00 - 17:...

  • 昨天,上家公司hr问我有没有认识的android工程师推荐一下,薪资待遇12-20k区间,聊完之后,我差点冲动去报个培训班,重新开始进入这个行业。最后,我被现实拉回了现实。不过我了解了一下android工程师的薪资待遇以及...

  • 写给 android 开发者的混淆使用手册 - android - 掘金 本文转自:点击打开链接 毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆。 首先,这里说的的混淆其实是包括...

  • 先来看看android组件化需要实现的目标按照业务逻辑划分模块项目模块能够单独启动测试能够根据需求引入或删除某些业务模块通过不同模块的组合,组成不同的app对于第一点:需要根据技术架构和业务架构来划分模块,这里...

  • python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。python社区提供了大量的第三方库,如numpy、pandas和requests,极大地丰富了python的应用领域,从数据科学到web开发。python库的丰富性是python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,matplotlib和seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • stm32单片机fpga毕设电路原理论文报告基于ide硬盘的数字图像存储技术研究本资源系百度网盘分享地址

  • 适合rust入门。深入浅出,事无巨细,远胜市面上所有入门书。而且是免费的

global site tag (gtag.js) - google analytics
网站地图