AndroidArchitecture
title: AndroidArchitecture
date: 2016-04-08 23:26:20
tags: [architecture]
categories: [Mobile,Android]
---
概述
本文记录 Android 官方关于项目架构的文章.
Android Architecture Blueprints [beta]
当我们开始明确如何组织和架构一个AndroidApp的时候,Android Framework层提供了很强大的可伸缩性。
这份自由虽然很有价值,但是同时也导致一个APP内存在如过重的类,命名体系不一样,架构导致难以测试,维护和扩展苦难等问题。
Android架构蓝图打算演示解决这类通用问题可能的方法。
在这个项目中,我们会提供一个机遇不同架构概念和不同工具的同一个项目实现。
你可以使用这些例子作为你创建自己的APP的一个参考,或者直接作为一个基础。本篇集中于代码结构,架构,测试和维护性。
然而,铭记于心的是,利用这些架构和工具,创建一个APP有很多方式,取决于你的侧重点。所以,这些架构不应该被当做是经典案例。
本篇例子中UI刻意保持了简单。
beat版的意义
我们一直在做一些可能会影响我们所有例子的决定。所以我们会在发布正式版之前,一直保持初始化的版本号。
例子
所有的例子都发布在他们对应的分支上。查看对应项目上看的README 以获取详细信息。
-todo-mvp/- 基本的MVP架构
-todo-mvp-loaders/- 基于todo-mvp,使用loaders来获取数据
-todo-mvp-databinding/-基于odo-mvp,使用databinding库
还在进行中的
- todo-mvp-contentproviders - 基于todo-mvp-loaders, 使用Content Providers
- todo-mvp-clean - 基于todo-mvp, 使用Clean Architecture的概念
- todo-mvp-dagger - 基于todo-mvp, 使用Dagger2来进行依赖注入
此外,还有很多计划中的例子。
为何是一个待做的项目
这个APP的目的是能够简单快速的理解,而不是增加演示这个复杂的设计和测试方案的复杂性。
可以查看这个APP的规格。
此外,还有一个类似的JavaScript的项目框架,叫TodoMVC。
我应该为我的APP选择哪个例子
每个例子,都有一个选择的尺度,和比较客观的评估,你可以根据你的实际情况选择。
你可能要考虑到你APP的大小,你整个团队的经验,你预估的维护成本,考虑你是否需要为平板,多平台适配,以及自己的框架偏好。
TODO-MVP
总概
这个例子是其他变种版本的基础。这个例子展示MVP模式的一个简单的实现,没有参杂其他的架构框架。
这个例子,使用手动注入依赖的方式来提供本地和远端的数据。异步的任务是通过callback实现的。

注意:在MVP的上下文中,属于view是被重新重载了。
android.view.View被称作"Android View",在MVP中接受presenter发送命令的view被简单的称为"view".
Fragments
使用fragment有两个理由:
activity和fragment进行隔离,非常适合用来实现MVP。
- activity作为一个控制器,用来创建和控制view和presenter。
- 可以充分利用fragment框架进行平板和多屏幕适配。
关键概念
在这个APP中有四个特点:
任务
任务详细
添加编辑任务
数据统计
每个特点有:
- 约定view和presenter的定义
- activity负责产生fragment和presenter
- fragment实现view中的接口
- presenter实现presenter定义的接口
总之,业务逻辑在presenter中,并且依赖于实现UI工作的view。
view层几乎是不包含业务逻辑的,只负责将presenter中的UI指令转换成UI表现,并且监听用户的UI操作,然后传递给presenter层。
通过接口来约定view和presenter之间的连接。
依赖
- 常用的Android官方support包(com.android.support.*)
- Android测试包(Espresso, AndroidJUnitRunner…)
- Mockito
- Guava (null checking)
特点
复杂性 - 这个比较容易理解
frameworks/libraries/tools的框架使用
还没有
概念复杂性
这个比较低,作为一个纯MVP实现。
可测试性
Unit testing
高,presenter可以作为仓库和数据源进行单元测试。
UI testing
高, 注入一个假的的module,允许进行假数据进行测试。
Code metrics
和传统没有架构的项目相比,
这个例子简绍了额外的类和接口:presenter,仓库,接口等等,所以在MVP中无论是代码的行数还是类的数量都比较高。
维护性
易于修改和添加新特性
高。
学习成本
低。项目特点明确,责任清晰明确。开发人员不需要了解项目中的外部依赖。
AndroidArchitecture的更多相关文章
- Google官方关于Android架构中MVP模式的示例续-DataBinding
基于前面的TODO示例,使用Data Binding库来显示数据并绑定UI元素的响应动作. 这个示例并未严格遵循 Model-View-ViewModel 或 Model-View-Presenter ...
- [译]Google官方关于Android架构中MVP模式的示例
概述 该示例(TODO-MVP)是后续各种示例演变的基础,它主要演示了在不带架构性框架的情况下实现M-V-P模式.其采用手动依赖注入的方式来提供本地数据源和远程数据源仓库.异步任务通过回调处理. 注意 ...
- Android MVP模式 谷歌官方代码解读
Google官方MVP Sample代码解读 关于Android程序的构架, 当前(2016.10)最流行的模式即为MVP模式, Google官方提供了Sample代码来展示这种模式的用法. Repo ...
- Android Weekly Notes Issue #225
Android Weekly Issue #225 October 2nd, 2016 Android Weekly Issue #225 本期内容包括: Android 7.0的Quick Sett ...
- Android Weekly Notes Issue #223
Android Weekly Issue #223 September 18th, 2016 Android Weekly Issue #223 本期内容包括: Offline时间戳处理; Acces ...
- Android Weekly Notes Issue #222
Android Weekly Issue #222 September 11th, 2016 Android Weekly Issue #222 ARTICLES & TUTORIALS Fo ...
- 转: GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean
十年前,Martin Fowler撰写了 GUI Architectures 一文,至今被奉为经典.本文所谈的所谓架构二字,核心即是对于对于富客户端的 代码组织/职责划分 .纵览这十年内的架构模式变迁 ...
- android MVC && MVP && MVVM分析和对比
相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...
- 让你Android开发更简单
转载:http://www.jianshu.com/p/22ff8b5fdadc 搭建一个新的Android项目,你会怎么做? 每个人对应用框架的理解不相同,但是最终达到的效果应该是一样: ①降低项目 ...
随机推荐
- VMware虚拟机安装Centos7图文教程
CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程 ...
- Notes 20180312 : String第四讲_String上的操作
作为一个基本的工具类,同时又是使用频率很高的类,Java为其提供了丰富的方法支持.Java中的String类中包含了50多个方法.最令人惊讶的是绝大多数方法都很有用,下面我们根据功能来分类介绍一下: ...
- oracle基础知识过一遍(原创)
用户.角色.权限.表空间 create tablespace test1_tablespace datafile ‘test1file.dbf’ size 10m; create temporary ...
- C++_类和对象
类和对象 OOP第二课 1 类的构成 1.1 从结构到类 1.2 类的构成 2 成员函数的声明 2.1 普通成员函数形式 2.2 将成员函数以内联函数的形式进行说明 3 对象的定义和使用 3.1 对象 ...
- VS2015菜单栏重复删除
举个例子,这个是工具栏的,出现了重复 只要选择工具栏自定义那个选项,在多余命令的下方,先删除几个外部命令,然后把空行删除,最后全部重置即可 结果如下图
- npm run build 时报错operation not permitted
1.项目使用vue框架,在npm run build 打包时报错: 访问对应的目录,发现无法打开,原来是文件被其他应用程序占用了,仔细看了一下,xftp文件传输的软件打开着,把它关闭以后,重新运行np ...
- echarts踩坑---容器高度自适应
在echarts中,若设置固定高度,当柱状图数据过多时会出现数据相互挤压,给用户的体验十分糟糕,可以通过给容器设置自适应高度,然后通过getDom()的方法解决此问题. 具体解决办法如下: <d ...
- php合成图片 文字
代码: public function mergePic(){ $ground = '/Public/merge/beijing.png'; $img = [ 'url'=>'/Public/m ...
- Python学习:20.Python网络编程(Socket)
一.Socket介绍 我们知道两个进程如果需要进行通讯,最基本的一个前提是能够唯一标示一个进程.在本地进程通讯中可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很 ...
- 检测com端口代码实现
1:scan HRESULT CDevHound::Scan(const vector<CString> &guiInfo, vector<DEV_INFO> & ...