写点什么

学会这些 Android 开发热门前沿知识,2020 年你就不用愁了!

用户头像
Android架构
关注
发布于: 刚刚

对于现在的 Android 及移动互联网来说,我们需要掌握的技术,我做了一个清单,掌握了这些过好 2020 年我想不是问题了(#^ o ^#):


泛型原理丶反射原理丶 Java 虚拟机原理丶线程池原理丶注解原理丶注解原理丶序列化 Activity 知识体系(Activity 的生命周期丶 Activity 的任务栈丶 Activity 的启动模式丶 View 源码丶 Fragment 内核相关丶 service 原理等)代码框架结构优化(数据结构丶排序算法丶设计模式)APP 性能优化(用户体验优化丶适配丶代码调优)热修复丶热升级丶 Hook 技术丶 IOC 架构设计 NDK(c 编程丶 C++丶 JNI 丶 LINUX)如何提高开发效率?MVC 丶 MVP 丶 MVVM 微信小程序 HybridFlutter

1. Android 架构设计模式

  • MVC 架构设计模式:MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。

  • MVP 架构设计模式:MVC 全名是 Model View Persenter,MVP 由 MVC 演变而来,是现在主流的开发模式。

  • MVVM 架构设计模式:MVVM 全名是 Model-View-ViewModel,它本质上就是 MVC 的改进版。


各种模型的**主要目的**都是是分离视图(View)和模型(Model),即将 UI 界面显示和业务逻辑进行分离。

1.1 架构设计模式-MVC


(1) 定义:


在 android 开发过程中,比较流行的开发框架曾经采用的是 MVC 框架模式。


  • M(Model)层:实体模型,处理业务逻辑。如:数据库操作,网络操作,I/O 操作,复杂操作和耗时任务等。

  • V(View)层:处理数据显示。在 Android 开发中,它一般对应着 xml 布局文件。

  • C(Controller)层:处理用户交互。在 Android 开发中,它一般对应着 Activity/Feagment。android 中主要通过 activity 处理用户交互和业务逻辑,接受用户的输入并调用 Model 和 View 去完成用户的需求。


(2) 特点


  • 低耦合

  • 可重用易拓展

  • 模块职责划分明确


(3) 实例


android本身的设计结构符合 MVC 模式。


(4) MVC 优缺点


  • MVC 的优点:MVC 模式通过 Controller 来掌控全局,同时将 View 展示和 Model 的变化分离开

  • MVC 也有局限性:


View 层对应 xml 布局文件能做的事情非常有限,所以需要把大部分 View 相关的操作移到 Controller 层的 activity 中。导致 activity 相当于充当了 2 个角色(View 层和 Controller 层),不仅要处理业务逻辑,还要操作 UI。一旦一个页面的业务繁多复杂的话,activity 的代码就会越来越臃肿和复杂。

1.2 架构设计模式-MVP


MVP 是从经典的 MVC 模式演变而来,它们的基本思想有相通的地方:Controller/Presenter 负责逻辑的处理,Model 提供数据,View 负责显示。在 Android 开发中,MVP 的具体实现流程是当 Presenter 接收到 View 的请求,便从 Model 层获取数据,将数据进行处理。处理好的数据再通过 View 层的接口回调给 Activity 或 Fragment。这样 MVP 能够让 Activity 或 Fragment 成为真正的 View,只做与 UI 相关的事而不处理其他业务流程。


(1) 定义


  • M(Model)层:实体模型,处理业务逻辑。如:数据库操作,网络操作,I/O 操作,复杂操作和耗时任务等。

  • V(View)层:负责View的绘制以及与用户交互。在 Android 开发中,它一般对应着 xml 布局文件和 Activity/Fragment

  • P(Presenter)层:负责完成 Model 层和 View 层间的数据交互业务逻辑


(2) 实例


(3) MVC 和 MVP 的区别


MVP 中的 View 并不直接使用 Model,它们之间的通信是通过 Presenter 来进行的,所有的交互都发生在 Presenter 内部,而在 MVC 中 View 会直接从 Model 中读取数据而不通过 Controller


  • MVC 和 MVP 的最大区别:MVC 的 Model 层和 View 层能够直接交互;MVP 的 Model 层和 View 层不能直接交互,需通过 Presenter 层来进行交互。

  • Activity 职责不同:Activity 在 MVC 中属于 Controller 层,在 MVP 中属于 View 层,这是 MVC 和 MVP 很主要的一个区别。可以说 Android 从 MVC 转向 MVP 开发也主要是优化Activity的代码,避免Activity的代码臃肿庞大

  • View 层不同:MVC 的 View 层指的是 XML 布局文件(或用 Java 自定义的 View);MVP 的 View 层是 Activity(或 Fragment)

  • 控制层不同:MVC 的控制层是 Activity(或 Fragment);MVP 的控制层是 Presenter,里面没有很多的实际东西,主要负责 Model 层和 View 层的交互。


(4) MVP 优缺点


  • MVP 的优点如下:


模型与视图完全分离,我们可以修改视图而不影响模型;项目代码结构清晰,一看就知道什么类干什么事情;我们可以将一个 Presenter 用于多个视图,而不需要改变 Presenter 的逻辑,这个特性非常的有用,因为视图的变化总是比模型的变化更频繁 ;协同工作(例如在设计师没出图之前可以先写一些业务逻辑代码)


  • MVP 也有不足之处:


接口过多,一定程度影响了编码效率。一定程度上导致 Presenter 的代码量过大。为了降低 Presenter 中业务繁多的问题,Google 又推出了 MVVM,试图通过数据驱动来减少 Presenter 的代码量。

1.3 架构设计模式-MVVM


(1) 定义


  • M(Model)层:仍然是实体模型(但是不同于之前定义的 Model 层),主要负责数据获取、存储和变化,提供数据接口供 ViewModel 层调用。

  • V(View)层:对应Activity/Feagmentxml布局文件 ,负责 View 的绘制以及与用户交互说明:View 层仅能操作 UI(数据绑定来实现 UI 更新);不能做任何和业务逻辑有关的数据操作

  • VM(ViewModel)层:负责完成 Model 层


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


和 View 层间的数据交互业务逻辑说明:ViewModel 层仅能做和业务逻辑有关的数据操作;不能做 UI 相关的操作

2. android 插件化

插件化来由:随着业务的增多,业务逻辑代码越来越多,apk 包也逐渐增大,不利于维护和升级。通过插件化开发可将功能模块解耦,不同的维护团队仅维护某模块的业务,同时当 app 升级时可仅对某功能模块进行升级而不需整体升级。

2.1 插件化要解决的问题—如何动态加载 apk

(1) android 类加载器及区别


类加载器作用:java 字节码通过类加载器加载到 java 虚拟器。


  • PathClassLoader:仅能加载文件目录下的 apk。

  • DexClassLoader:可以加载 apk 文件中的字节码(从 dex 实体 jar 文件中加载 java 字节码)。主要用于动态加载和代码热更新等。


(2)反射: java 中的反射使我们在运行时获得这个类的属性、方法和 class 内部的信息机制,最重要的是我们可以在运行时实例化这个对象调用方法,这也是 java 反射的最大优点。(3) 实现动态加载 apk


什么是动态加载 apk:android 中有一个速度程序会主动到指定的 sd 卡中去加载 apk,并通过代理 activity 去执行。


实现:需要一个代理 activity 去执行 apk 中的 activity,主要通过反射去获得它的属性和方法,从而进行 apk 的调用。实现原理:类加载器(加载类)+反射(获取属性和方法)+动态代理(执行)



如:


2.2 插件化要解决的问题—如何加载资源

通过 android 中 ServiceManager 类的隐藏方法来加载资源。

2.3 插件化要解决的问题—如何加载代码

使用 java 中的类加载机制,但是 android 和 java 也有一点不一样,android 比 java 多了组件和生命周期,所以并不是类加载进来就能使用(不能管理生命周期)。

3. Android 热更新(在线热修复技术)

(1) 热更新流程


  • 检测到线上严重的 crash(参考:app 检测 crash 并发送日志到服务器的实现)

  • 线上版本拉出 bugfix 分支并在分支上修复问题

  • jenkins 构建及生成补丁

  • app 在合适时机通过推送或主动拉取补丁文件

  • 将 bugfix 代码合并到 master 上



用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
学会这些Android开发热门前沿知识,2020年你就不用愁了!