系统相关
首页 > 系统相关> > app保活双进程守护,一次关于JVM的面试经历,思维导图+源代码+笔记+项目

app保活双进程守护,一次关于JVM的面试经历,思维导图+源代码+笔记+项目

作者:互联网

一. 开发背景

想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样。

我们的项目需要开发一款智能硬件。它由 Web 后台发送指令到一款桌面端应用程序,再由桌面程序来控制不同的硬件设备实现业务上的操作。从 Web 后台到桌面端是通过一个 WebSocket 长链接来进行维护,而桌面程序到各个硬件设备也是一个 TCP 长链接来维护的。

本文讲述的,其实是从桌面程序到各个硬件之间的通讯。

1. Android架构设计模式

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

1.1 架构设计模式-MVC

(1) 定义:

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

(2) 特点

(3) 实例

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

(4) 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) 定义

(2) 实例

(3) MVC和MVP的区别

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

(4) MVP优缺点

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

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

1.3 架构设计模式-MVVM

(1) 定义

2. android插件化

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

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

(1) android类加载器及区别

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

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

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

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

最后送福利了,现在关注我并且加入群聊可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,欢迎加群探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿

点击Gitee领取
录播视频图.png

标签:MVP,导图,app,加载,Presenter,MVC,Model,源代码,View
来源: https://www.cnblogs.com/mifei1/p/15186137.html