MiQing Blog

无惧艰难,让生活更幸福更充实,努力起飞!

0%

前言

开发过程中常见的框架模式有MVC、MVP、MVVM,本篇文章讲解MVVM框架模式的原理及在Android开发中如何实现及使用该框架模式。这里一定要明白MVVM不是某些技术实现而是架构模式或者说是设计思路,我们根据MVVM的设计原理进行架构开发,最终形成的是一系列代码组合而成的MVVM模式的框架,MVVM是Android开发最好的架构选择之一,也是Google官方非常支持和鼓励开发者使用这一架构模式,在这个框架上开发出来的程序稳定性更高,可扩展性更强。

MVVM原理

MVVM模式不是四层,任然是3层,是Model-View-ViewModel的简写,VM是ViewModel的缩写,VM可以理解为View的数据模型和Presenter的合体,ViewModel和View之间的交互通过data binding完成。下面我们挨个来来说Model、View、ViewModel。

Model

Model层就是职责数据的存储、读取网络数据、操作数据库数据以及I/O,它就是用来提供数据,不关心数据去做什么。

View

View层做的仅仅和UI相关的工作,在Android中我们只在XML、Activity、Fragment写View层的代码,View层不做和业务相关的事,也就是我们的Activity 不写和业务逻辑相关代码,一般Activity不写更新UI的代码,如果非得要写,那更新的UI必须和业务逻辑和数据是没有关系的,只是单纯UI逻辑来更新UI,比如:滑动时头部颜色渐变、editttext根据输入内容显示隐藏等,简单的说:View层不做任何业务逻辑、不涉及操作数据、不处理数据、UI和数据严格的分开。

ViewModel

ViewModel 只做和业务逻辑和业务数据相关的事,不做任何和UI、控件相关的事,ViewModel 层不会持有任何控件的引用,更不会在ViewModel中通过UI控件的引用去做更新UI的事情。ViewModel就是专注于业务的逻辑处理,操作的也都是对数据进行操作,这些个数据源绑定在相应的控件上会自动去更改UI,开发者不需要关心更新UI的事情。

此处贴出MVVM的模型图
示例1

ViewModel是如何让View和Model实现数据绑定,达到自动更新以及数据更新双向的绑定关系呢?
Google在2018年推出了Android Jetpack组件,Jetpack是一个Android软件组件的集合,其中AAC(Android Architecture Components)框架是android官方提供的一系列组件,用来非常方便的实现MVVM架构。
本文主要讲解AAC中Lifecycle、LiveData、ViewModel以及DataBinding的结合使用搭建能够基础开发的MVVM架构项目。

添加依赖

1
2
//Google AAC
implementation 'android.arch.lifecycle:extensions:1.1.1'
阅读全文 »

前言

在开发过程中MVC模式的架构是最为常见的,Android本身Activity和XML布局的结合就是比较典型的例子,使用过程中业务的逻辑、数据的处理、View的更新都会在Activity中进行这样代码的复杂度和维护成本就会增高View和Model的耦合度很高,开发者们对于这种情况都会选择进行MVC的封装拆分增加了开发的难度。

MVP是从MVC演化而来全称 Model-View-Presenter,即模型-视图-层现器。而现在Android开发架构中MVP架构已成主流,MVP模式会解除View与Model的耦合,定义了Presenter交互中间人作为View和Model之间的桥梁,它从Model中获取到数据返回给View层使View和Model之间没有耦合,并且将业务逻辑从View中抽离出来。View拥有Presenter成员变量实现逻辑接口,View将操作传递给Presenter,最后由Presenter再将结果返回View。Model就是数据仓库用于数据的存储和获取,Presenter拥有对Model进行数据的存储和获取方法。

此处贴出MVC和MVP思维导图能够清楚的看出两种模式之前的区别
示例1

阅读全文 »

前言

在Rxjava满大街跑的时代,使用过程中无法避免会有Rxjava资源回收处理不到位的地方,笔者深受其危害。当页面被销毁的时候,
未正确处理取消订阅就会导致内存泄漏,往往我们会在页面的onDestroy方法中执行如下方法:

1
2
3
if(rxDisposable!=null && !rxDisposable.isDisposed()){
rxDisposable.dispose();
}

为了代码的冗余我们还会去封装工具类去统一的处理回收,但是无法避免的会手动调用多次,那么如何更优雅及方便的进行资源的回收呢?
答案是肯定有的,本文会介绍更优雅、更安全、更方便的去使用Rxjava无需担心资源回收的问题。

阅读全文 »

前言

上一个文章【Android 开发框架搭建】-网络框架三剑客Okhttp+Rxjava+Retrofit介绍了Android如何搭建轻量级Okhttp+Rxjava+Retrofit网络框架,此篇文章介绍该框架高级功能使用

高级使用

这里介绍框架高级功能使用方式

1.使用RxCache

此组件官方概述: 就像Picasso 缓存您的图片一样,毫不费力缓存您的数据对象。
每个Android Application都是一个客户端应用程序,这意味着仅仅为缓存数据创建数据库并进行维护毫无意义。
事实上,传统方式通过数据库来缓存数据并没有解决根本性的问题:以更加灵活简单的方式配置缓存。
灵感来源于 Retrofit , RxCache是一个用于Android和Java的响应式缓存库,它可将您的缓存需求转换为一个接口进行配置。
当提供一个 observable, single, maybe or flowable (这些是RxJava2支持的响应式数据类型) 这些由耗时操作提供的数据,RxCache确定是否需要subscribe,或覆盖先前缓存的数据。
此决定是基于RxCache的Providers进行配置的。

该组件详细使用方式可参考官方Github文档,此处只会简单结束框架如何使用该组件。
注:使用该组件必须依赖Rxjava库,本框架上篇文章中已经添加过该依赖
Github传送门

阅读全文 »

前言

当今网络框架什么最火,当属Okhttp +rxjava +retrofit 三大开源框架结合,简单易用、功能强大。Retrofit 负责请求的数据和请求的结果,使用接口的方式呈现,OkHttp 负责请求的过程,RxJava 负责异步,各种线程之间的切换,三者缺一不可。

简介

本文章使用框架版本为:Okhttp3 +rxjava2 +retrofit2

OkHttp3

HTTP是现代应用程序网络的一种方式。这是我们交换数据和媒体的方式。高效地使用HTTP可以让你的东西加载更快,节省带宽。
OkHttp是一个HTTP客户端,是有效的默认:
HTTP/2支持允许所有请求到同一主机共享一个套接字。
连接池减少了请求延迟(如果HTTP/2不可用)。
透明GZIP缩小下载大小。
响应缓存完全避免了网络中的重复请求。
当网络出现问题时,OkHttp会持续运行:它会从常见的连接问题中安静地恢复。如果您的服务有多个IP地址,如果第一次连接失败,OkHttp将尝试替代地址。这对于IPv4+IPv6和驻留在冗余数据中心中的服务是必要的。OkHttp支持现代的TLS特性(TLS 1.3、ALPN、证书固定)。它可以配置为向后扩展连接。
使用OkHttp很容易。它的请求/响应API使用流畅构建器和不变性设计。它支持同步阻塞调用和带有回调的异步调用。

注:OkHttp 支持 Android 2.3 及以上版本Android平台, 对于 Java, JDK 1.7及以上.

Github传送门
官网传送门

阅读全文 »

前言

此方案为今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案,github star 10.7k受欢迎程度极高,侵入性非常低,该方案和项目完全解耦,在项目布局时不会依赖哪怕一行该方案的代码,而且使用的还是 Android 官方的 API。

项目介绍

该文章是根据AutoSize作者博客介绍总结记录,方便后续使用。

官方中文介绍: AndroidAutoSize-README-zh.md

GitHub项目地址: AndroidAutoSize

阅读全文 »

前言

上一个文章【Android 开发框架搭建】-使用Iconfont-阿里巴巴矢量图标库介绍了在Android中如何使用阿里巴巴字体文件,但是字体文件只能使用单色的字体图标,在项目中单色图标使用有限这里介绍Android项目阿里巴巴多色SVG矢量图标的使用,丰富我们的应用UI效果减少项目的容量。

使用

1. 前往阿里巴巴矢量图标下载SVG图片

iconfont-logo 阿里巴巴矢量图标网站

阅读全文 »

前言

在项目中经常需要用到一些小图标,避免需要切图或者往项目资源中导入大量图标资源。我们可以使用字体矢量图标来减少资源、适配更方便,这里介绍Android项目阿里巴巴矢量字体图标的使用。

使用

1. 前往阿里巴巴矢量图标下载字体文件

注:字体只支持单色图标哦,如项目需要使用多色图标可以使用SVG矢量图标,后续章节再介绍Android中如何使用阿里巴巴矢量图标SVG方式的。

阅读全文 »

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment