Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android 应用架构演变

Android 应用架构演变

作者头像
用户3004328
发布于 2018-09-06 09:07:36
发布于 2018-09-06 09:07:36
1.4K0
举报
文章被收录于专栏:增长技术增长技术

Android 应用架构演变

原始架构

Android刚开始的时候没有第三方库,基本方式就是AsyncTaskHandler配合使用,简单直接没有过多分层设计

代码被划分为两层结构:Data Layer(数据层)负责从数据源获取和存储数据;View Layer(视图层)负责处理并将数据展示在UI

  • DataProvider提供一些方法,使ActivityFragment能够实现与数据源的数据交互。这些方法使用AsyncTask在一个单独的线程内执行耗时操作(网络请求、数据库操作等),然后通过回调将结果返回给ActivityFragment

优点

  1. 结构少容易理解每层的目的

缺点

  1. ActivityFragment变得非常庞大并且难以维护
  2. 可能会导致过多的回调嵌套Callback Hell(回调地狱),代码结构丑陋难以阅读和理解,在此基础上添加或更改新特性成本巨大而且容易出错
  3. 很多业务逻辑都在ActivityFragment中,单元测试根本没法进行

MVC(来自Java Web)

随着界面越来越多,业务越来越复杂,开发人员开始考虑架构设计,本身Android就是用Java语言编写的,所以自然就首先考虑用原来Java Web端成熟的设计方案MVC尝试划分结构

优点

  1. 耦合性低:减少模块之间代码的相互影响
  2. 可扩展性好:添加需求,更改代码相对容易。
  3. 模块职责划分明确:利于代码维护。

缺点

  1. 相对于Android APP来说MVC也仅仅起到了部分解耦的作用,主要是ControllerView视图和Model模型分离,但是在Activity中有很多关于视图UI的显示代码,因此View视图和Activity控制器并不是完全分离的,即一部分View视图和Activity Controller控制器是绑定在一起的,所以相对于Java所适用的MVC方案,在Android中仅仅起到部分优化效果,在UI更新逻辑复杂多变的情况弊端更加会被放大。

MVP

Google对Android APP开发第一次结构设计的尝试

MVP是对MVC的改进,让Model和View完全解耦

优点

  1. ModelView不存在直接关系
  2. Presenter与View、Model的交互使用接口定义交互操作进一步达到松耦合也可以通过接口更加方便地进行单元测试

缺点

  1. 代码很清晰,不过增加了很多

MVVM

MVVM最早是由微软提出的 Google实现了DataBinding机制。要实现MVVMViewModel就需要把数据与UI进行绑定,<data>节点就为此提供了一个桥梁,我们先在<data>中声明一个variable,这个变量会为UI元素提供数据(例如TextViewandroid:text),然后在Java代码中把”后台”数据与这个variable 进行绑定。 类似于Java Web JSP中的标签语法

ViewViewModel绑定在一起,ViewModel的改变会同步到View层,从而View层作出响应

优点

  1. 隔离了UI层和业务逻辑层,降低程序的耦合度

缺点

  1. 会产生很多类型

RxJava(Reactive Programming for Java)+RxAndroid

RxJava允许通过异步流的方式处理数据,并且提供了很多操作符,可以将这些操作符作用于流上从而实现转换,过滤或者合并数据等操作。RxAndroidRxJava基础上实现了线程的自由切换。

优点

  1. RxJava的Observable和操作符避免了嵌套回调的出现。
  2. 响应式编程能够非常好的简化代码,让代码的可读性、稳定性都得到很大程度的提高。

缺点

  1. 仅仅是一种编程方式,对Android而言,没有生命周期概念,需要自己维护管理

agera(Reactive Programming for Android)

Google实现的类似RxJava的函数式编程

Activation lifecycle and event chain

一个Observable当它被至少一个Updatable观察时它处于active状态,当他不被任意一个Updatable观察时处于inactive状态。从另一个角度说:一个Updatable通过注册到处于inactiveObservable上来激活Observable;当处于activeObservable仅具有一个注册的Updatable时,该Updatable通过取消注册来使其停用。

Observables and updatables

一个Observable代表一个事件源,一个Updatable观察这些事件。一个Updatable通过Observable.addUpdatable(Updatable)注册到observable,通过Observable.removeUpdatable(Updatable)取消注册。一个事件以Updatable.update()的形式被发送到updatable

UI lifecycle

事件链特别适合伴随UI的生命周期构建响应式结构

优点

  1. 结构少容易理解每层的目的

缺点

  1. 刚推出还没被大面积使用

总结

原始架构 MVC MVP MVVM这四种架构方式对Android APP来说都是项目结构采用一种方式后基本架构就不会改变。RxJava agera仅仅是一种编程方式的改变,但这种方式对手机应用开发来说非常合适,鉴于以上架构的演变,原始架构基本不会有人再使用了,MVC在移动端也是不太适合,MVP MVVM都是Google自家推出的,个人实践中尝试的RxJava+MVP组合使用,MVVM个人感觉用着不爽,涉及xml和代码两处容易出问题。agera还在开发阶段,后续怎样未知。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android应用架构
来源: 小鄧子(@Rx小鄧子) Android开发生态圈的节奏非常之快。每周都会有新的工具诞生,类库的更新,博客的发表以及技术探讨。如果你外出度假一个月,当你回来的时候可能已经发布了新版本的Support Library或者Play Services 我与Ribot Team一起做Android应用已经超过三年了。这段时间,我们所构建的Android应用架构和技术也在不断地演变。本文将向您阐述我们的经验,错误以及架构变化背后的原因。 曾经的架构 追溯到2012年我们的代码库使用的是基本结构,那个时候我们没有
编程范 源代码公司
2018/04/16
1.3K0
Android应用架构
改造 Android 官方架构组件 ViewModel
原文地址: http://www.jianshu.com/p/963a9d146da7
用户2965681
2018/09/13
7890
Android应用架构分析(转)
Android开发生态圈的节奏非常之快。每周都会有新的工具诞生,类库的更新,博客的发表以及技术探讨。如果你外出度假一个月,当你回来的时候可能已经发布了新版本的Support Library或者Play Services
张拭心 shixinzhang
2022/05/06
6530
Android应用架构分析(转)
如何构建Android MVVM应用程序
Databinding 是一种框架,MVVM是一种模式,两者的概念是不一样的。我的理解DataBinding是一个实现数据和UI绑定的框架,只是一个实现MVVM模式的工具。ViewModel和View可以通过DataBinding来实现单向绑定和双向绑定,这套UI和数据之间的动态监听和动态更新的框架Google已经帮我们做好了。在MVVM模式中ViewModel和View是用绑定关系来实现的,所以有了DataBinding 使我们构建Android MVVM 应用程序成为可能。   之前看了很多关于DataBinding的博客和相关的一些Demo,大多数就是往xml布局文件传入一些数据,然后把这些数据绑定到控件上( 如TextView binding:text=“@{user.name} ),接着在这些控件上(如Button binding:setOnClickListener="@{user.listener}") 设置一些事件到控件上,基本讲述都是DataBinding的基本用法。但是并没有人告诉你把一个onClickListener 写到一个类并把这个listener绑定到xml里面上是不是不太好,也没有人告诉你这个和xml布局绑定的ViewModel类应该放哪些数据,应该做什么事?应该如何设计?更是很少有博文来告诉你在Android 中如何通过Data Binding 去构建MVVM 的应用框架。这也就是是本篇文章的重点。接下来,我们先来看看什么是MVVM,然后在一步一步来设计整个应用程序框架。
developerHaoz
2022/05/13
1.4K0
如何构建Android MVVM应用程序
告别混乱代码!MVVM+数据绑定,让你的Android应用飞起来,MVVM+数据绑定技巧,打造Android应用的数据流水线!
随着移动应用的快速发展,Android操作系统已成为全球最受欢迎的智能手机平台之一。在Android应用开发中,选择合适的软件架构对于项目的可维护性、可扩展性和开发效率至关重要。近年来,MVVM(Model-View-ViewModel)模式因其清晰的职责划分和高度的解耦性而备受关注。本课题将深入探讨MVVM模式在Android开发中的实战应用与数据绑定技巧,旨在提高Android应用的质量和开发效率。
小白的大数据之旅
2024/11/20
2320
告别混乱代码!MVVM+数据绑定,让你的Android应用飞起来,MVVM+数据绑定技巧,打造Android应用的数据流水线!
“终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!
前面三篇介绍了Jetpack 架构组件中 最重要 的部分:生命周期组件-Lifecycle、感知生命周期的数据组件-LiveData、视图模型组件-ViewModel。 这篇,就来探索下目前android开发中 最优秀、讨论最多的架构模式—— MVVM 。
胡飞洋
2021/02/19
2.2K0
“终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!
如何构建Android MVVM 应用框架
概述 说到Android MVVM,相信大家都会想到Google 2015年推出的DataBinding框架。然而两者的概念是不一样的,不能混为一谈。MVVM是一种架构模式,而DataBinding是一个实现数据和UI绑定的框架,是构建MVVM模式的一个工具。 之前看过很多关于Android MVVM的博客,但大多数提到的都是DataBinding的基本用法,很少有文章仔细讲解在Android中是如何通过DataBinding去构建MVVM的应用框架的。View、ViewModel、Model每一层的职责如
美团技术团队
2018/03/12
4.6K1
如何构建Android MVVM 应用框架
用代码手把手教你使用MVVM
网上关于MVVM框架的搭建和使用的文章很少,大多提到MVVM框架,就是在介绍DataBinding的使用。对于MVVM中各模块之间如何划分,如何定义,又是如何配合实现高度解耦的文章更是少之又少。大家看完后还是一头雾水,只是对MVVM有个大概的了解,并不很清楚如何上手。
蜻蜓队长
2018/08/03
2K0
用代码手把手教你使用MVVM
一种MVVM风格的Android项目架构浅析
前几天接触公司一Android项目,刚看代码时,不知道这么多层级的代码都是干嘛的,看着有点儿懵。只有清楚了结构和流程,才能够在浩瀚的代码里游刃有余。
杨永贞
2020/08/04
1.4K0
Android应用架构前世今生
前言 Android的开发生态系统发展迅速,在开发Android的几年的时间里,用来构建Android应用的架构与技术一直在不断进化。随着项目的不断更新迭代,应用的架构也有不一样的变化。由于开发人员的数量、项目的业务复杂度、需求的开发时间、应用的使用量级,使用的技术架构也不相同。没有最好的架构,只有最合适的。通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合。这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,便于项目的后期维护。下面总结及汇总一下目前Android
CSDN技术头条
2018/02/06
9210
Android应用架构前世今生
三大架构的比较
MVC 模型层(Model) 负责存储、检索、操纵来自数据库或者网络的数据 视图层(View) 用户界面,一般采用XML文件进行界面的描述 控制层(Controller) 业务逻辑处理 1. 工作原理
我就是马云飞
2018/02/05
1.2K0
三大架构的比较
Google 推荐在 MVVM 架构中使用 Kotlin Flow
链接:https://juejin.im/post/6854573211930066951
陈宇明
2020/12/16
4.8K0
Google 推荐在 MVVM 架构中使用 Kotlin Flow
Android UI 架构演进:从 MVC 到 MVP、MVVM、MVI
MVC 初步解决了 Activity 代码太多的问题,但也有缺点:我们的初衷 Activity / Fragment 是只处理表现逻辑的部分 ,但现实是 Activity 天然不可避免要处理 UI,也要处理用户交互,说明 Activity 本身天然承担了 View 的角色。那么这个架构就会造成 Activity 里糅合了视图和业务的代码,分离程度不够。
用户9995743
2022/09/26
1.7K0
Android UI 架构演进:从 MVC 到 MVP、MVVM、MVI
(新瓶旧酒)谷歌官方MVP项目学习--浅入源码
项目的目的是通过展示各种架构app的不同方式来帮助开发者解决架构问题。项目中通过不同的架构概念及方式实现了功能相同的app。你可以用示例来当做参考,或是干脆拿来当做创建app项目的基础。项目中,希望大家能把关注点集中到代码结构、整体架构、可测试性、可维护性这四个方面。当然实现app有很多种方式,千万不要把它当做定式。
用户2802329
2018/08/07
8280
(新瓶旧酒)谷歌官方MVP项目学习--浅入源码
Android从立项到上线——修仙之路
名称结构为“技术点模块点空间类型_功能名”结构,技术点主要有:selector、translate、alpha、scale等,模块名主要有:login、pay、mine、setting等,控件类型主要有:button、textview、imageview、dialog等,功能名主要有:findpwd、request、back、next等。
蜻蜓队长
2018/08/03
8790
Android从立项到上线——修仙之路
Android技术栈(四)Android Jetpack MVVM 完全实践
本文包含Android中MVVM体系中的很多部分,主要对ViewModel+DataBinding+RxJava+LiveData+Lifecycle等笔者所使用的技术体系进行解析.
Android技术干货分享
2019/04/18
4K0
Android技术栈(四)Android Jetpack MVVM 完全实践
Android开发3年,九月份面试12家大厂跳槽成功,我有一些面试经验想分享给你们
在下2017年毕业,目前从事android开发工作已经3年了,前段时间刚完成一次跳槽,面试了几家公司,将一些面试经验分享给大家,希望对大家有所帮助。
Android技术干货分享
2020/09/28
1.7K0
Android开发3年,九月份面试12家大厂跳槽成功,我有一些面试经验想分享给你们
正确认识 MVC/MVP/MVVM
做移动端开发和前端开发的人员,对 MVC、MVP、MVVM 这几个名词应该都不陌生,这是三个最常用的应用架构模式,目的都是为了将业务和视图的实现代码分离,从而使同一个程序可以使用不同的表现形式。不过,网上的文章对这方面的解说众说纷纭,其中不乏有些错误的描述,导致有些人应用这些架构模式时陷入一些错误陷阱。本文将追根溯源,力求让大伙对这三个架构模式形成正确认识。
Keegan小钢
2020/12/11
2.9K1
正确认识 MVC/MVP/MVVM
livedatabus详解,阿里是如何用他来做淘宝架构的?
Google 为了帮助 Android 开发者更快更好地开发 App,推出了一系列组件,这些组件被打包成了一个整体,称作 Android Jetpack,它包含的组件如下图所示:
Android技术干货分享
2019/05/15
1.2K0
livedatabus详解,阿里是如何用他来做淘宝架构的?
学习笔记 | Android开发常用的几种模式
warning: 这篇文章距离上次修改已过577天,其中的内容可能已经有所变动。
Ranlychan
2023/03/05
2990
学习笔记 | Android开发常用的几种模式
推荐阅读
相关推荐
Android应用架构
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档