前言

今天我给大家再次分享一下,我最近的一些读书的感想,思考起来,确实能够给自己带来一些真实的帮助和启发,希望大家在平时的工作学习中,也能够认清楚学习的一些本质。

如果我们的学习是在不断掌握应对具体工作场景和问题的方法,那就是在努力提升技术效率。在这种模式下,我们遇到每个新问题都要学习新知识。

如果我们的学习是在了解问题本质,了解解决方案的底层规律,能够让我们认清楚问题表象背后的实质,那我们就是在提升认知效率。在这种模式下,我们会发现,很多看似全新的问题,其实只不过是狡猾的旧问题换了一身装扮再次出现而已。

然而,我们大多数人的学习层次一直无法提升,就是因为我们掉进了追逐技术效率的游戏圈套:我们越努力,跑得越快,要学习的新知识就越多。而这,让我们陷入了学习的“老鼠赛道”。在老鼠赛道中,我们看起来一直在努力,可是其实是在原地打转。

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/Feagment 和xml布局文件 ,负责View的绘制以及与用户交互 说明:View层仅能操作UI(数据绑定来实现 UI 更新);不能做任何和业务逻辑有关的数据操作

  • VM(ViewModel)层:负责完成Model层和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的调用。

实现原理:类加载器(加载类)+反射(获取属性和方法)+动态代理(执行)

学习路线+知识梳理

花了很长时间,就为了整理这张详细的知识路线脑图。当然由于时间有限、能力也都有限,毕竟嵌入式全体系实在太庞大了,包括我那做嵌入式的同学,也不可能什么都懂,有些东西可能没覆盖到,不足之处,还希望小伙伴们一起交流补充,一起完善进步。

本文在开源项目:Android开发不会这些?如何面试拿高薪 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md) 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

这次就分享到这里吧,下篇见

当上项目经理才知道!整理几个重要的Android知识,论程序员成长的正确姿势相关推荐

  1. 当上项目经理才知道!Android快速转战Kotlin教程,年薪50W

    前段时间有人问我:「你是怎么成为一名软件架构师的?」我们就此探讨了必备技能.经验,以及储备相关知识所需的时间和精力.除此之外,我也回顾了自己走过的路.使用或尝试过的技术,以及我从那些五花八门的工作中学 ...

  2. 当上项目经理才知道!linuxmysql执行sql文件命令

    零基础如何学习Java? 首先,你要明白一点,Java入门不难! 无论你是从事哪个行业,兴趣一定是最好的老师,也是你学习的动力. 学习方式1:自学 自学模式其实我个人不建议绝大部分的人选择,因为自学是 ...

  3. 用老司机的理财经历告诉你,这才是程序员理财的正确姿势

    面对国内CPI持续走高,房价越来越高,金价持续走低,第三方理财野蛮生长,基金理财持续走红的情况,作为程序员的你们,是否已经开始按照自己的规划合理地理财了呢?俗话说,你不理财,财不理你,小钱也可以做投资 ...

  4. 2022中级Android开发面试解答,当上项目经理才知道

    缘起 随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑.快速迭代的目的越来越难,还有65535,应用之间的互相调用等等问题,插件化技术应用而生.如果没有插件化 ...

  5. 当上项目经理才知道!2021年Java开发者常见面试题

    前言 这段时间一直在学习Netty相关知识,因为涉及知识点比较多,也走了不少弯路.目前网上关于Netty学习资料琳琅满目,不知如何下手,其实大家都是一样的,学习方法和技巧都是总结出来的,我们在没有找到 ...

  6. 怎么样的项目经理才是合格的项目经理?

    怎么样的项目经理才是合格的项目经理? 这个问题存在于很多公司.也许读者的公司够正规不存在这样的问题. 在中国当谈到项目经理这个词语或者职位时,很多人的脑袋里闪现的是技术与管理的化身.对于项目经理,多数 ...

  7. 程序员成长道路上必经的几个阶段

    本文是一位前辈总结的程序员成长四个阶段,个人觉得非常有道理,你看你在哪个阶段呢? 阶段一:不知道自己不知道(Unconscious incompetence) 大学期间,我和老师做过一些小项目,自认为 ...

  8. 程序员当上项目经理的时候!来看看项目经理的素质模型!

    ✎ 1. 素质模型的作用  谈素质模型是一件很严肃的事情.因为素质模型就像一面镜子,项目经理拿来一照,可以发现自己的优势和弱点.只有扬长补短,才能在职业发展之路上步步高升. 管理方面的素质模型很多,但 ...

  9. tb项目管理实践_项目经理与项目管理整理

    项目经理职责: 要想项目的分配尽可能地准确,任务分配者必须了解项目研发相关的技术. 进行产品开发过程中的业务目标.进度.成本.质量控制. 挑选项目团队并进行团队建设,激发.鼓舞和改进团队的生产效率. ...

最新文章

  1. 【转】js之匿名函数
  2. Linux系统端口聚合技术bonding
  3. Ember.js学习项目源码发布
  4. 怎么让电脑屏幕一直亮着_笔记本开机白屏怎么回事 笔记本开机白屏解决方法【详解】...
  5. 开源虎墩同名电影《小虎墩大英雄》定档大年初一
  6. STL容器删除元素的陷阱
  7. 论文浅尝 | 近期论文精选
  8. 神经网络densecnn_对比学习用 Keras 搭建 CNN RNN 等常用神经网络
  9. 文件类的操作 File c# 1614823687
  10. 语音识别项目报告.pdf
  11. JS图表工具 ---- Highcharts
  12. ffmpeg time_base详解
  13. TexturePacker 图片打包工具讲解与使用并且批处理打多包以及资源加密
  14. C语言考试知识点汇总(理论知识点)
  15. L - 芜湖塔台请求起飞
  16. Rich Dad Poor Dad
  17. 不是二进制MAT文件,请尝试执行 load -ASCII 以便以文本形式读取
  18. android梦网物联卡信息,梦网物联云:实现智能穿戴只需一张物联网卡
  19. 学海无涯!史上最全的《Android面试题及解析》,赶紧收藏!
  20. 对话bot语音输入交互竞品调研

热门文章

  1. WAIC2023记录
  2. 大疆Osmo手持云台相机图赏
  3. webug4.0通关
  4. php mysql 防注入_PHP MySQLI防止SQL注入
  5. JumpServer 3:JumpServer 实际应用
  6. CTF之302重定向
  7. 语音直播Demo及运行指引
  8. 软件架构设计师-软件质量属性-架构评价方法-SAAM-ATAM
  9. 如何设计散列表(哈希表)
  10. 鸢尾花数据集聚类分析