用通俗的语言解释冷更新和热更新。

用通俗的语言解释冷更新和热更新。,第1张

热更银轿埋新是指软件不通过运营商店的软件版本更新审核,直接通过应用自行下载的软件数据更新的行为。简单来说,就是在用户下载安装APP之后,打开App时遇到的即时更新。热更新是一种各大手游等众多App常用的更新方式。

冷更新差不多就是重装的意思,用户主动从网络、存储介质(光驱、u盘等)来获取安装包,进行安装的过程。而热更新,是程序自主从安装渠道(一般是网络)进行更新升级的过程。

工作原理

热更新就是动态下发代码,它可以使开发者在不发布新版本的情况下,修复 BUG 和发布功能,让开锋蚂发者得以绕开苹果的审核帆宽机制,避免长时间的审核等待以及多次被拒造成的成本。

技术特点

在iOS中有两种App更新方式:一种是在AppStore内进行更新,更新时重新下载全部安装包;另一种就是热更新,用户只有在打开App时才会发现热更新包,更新时只需下载安装更新部分的代码,再次打开时即可。热更新最大的优点就是快,它可以绕过苹果方面的审核,更新通常只需一个晚上即可上线,另一大优点就是更新包较小,一般都在1M左右,用户不连接WiFi也可随意下载。

阅读了网上一些文章,其实使用C#进行热更新是可以的,将需要更新的代码打包成程序集,然后利用反射即可,但是也提到在IOS平台是不行的,至于为什么不行,就不再说了,然后就是推荐Lua作为热更新方案,但是,为啥Lua就行?C#就不行?

因为C#是编译型语言,Lua是解释型语言?

好多人都说Lua能热更新,是因为它是解释型语言,不用编译,在运行时能动态解释Lua代码并运行。这种方法实际上不准确,从某些角度来说是错的。Lua确实是解释性脚本语言,但是不是因为是解释型才能进行热更新。即使使用C++这种编译语言,也能进行热更新,将动态链接库进行更新就是,然后动态加载动态链接库获取更新的函数地址即可。

而且,还有一点,C#并不能说是一种编译型语言,C#代码会被编译成IL,IL解释成机器码的过程可以在运行之前进行也能在运行时进行。如果在运行时大哪进行解释,那么和Lua不就一样了吗,为啥C#不能进行热更新呢?

JIT对IL进行解释执行的原理

首先说一下,JIT对IL如何在运行时进行解释并执行的,大致过程为:将IL解释为所在平台的机器码,开辟一段内存空间,要求这段内存空间可读、可写、可执行,然后把解释出的机器码放入,修改CPU中的指令指针寄存器中的地址,让弊知CPU执行之前解释出来的机器码。

注意这段内存的条件,最重要的一条是必须是可执行的,一般的内存申请我们只是存放数据,但是这里的内存权限要是有可执行权限

IOS限制了什么?

IOS不允租仿消许获取具有可执行权限的内存空间,这就直接要求JIT要以full AOT模式,这种模式会在生成之前把IL直接翻译成机器码而不是在运行期间,进行了这种 *** 作C#从某种角度来说和C++一样,成为了编译型语言,失去了运行时解释的功能。

Lua的解释执行怎么就行呢?

如果Lua的解释执行原理和C#相同,肯定也不能在IOS平台上运行时解释执行。Lua是使用C编写的脚本语言,它在运行时读入Lua编写的代码,在解释Lua字节码(Lua自己的指令)时不是翻译为机器码,而是使用C代码进行解释,不用开辟特殊的内存空间,也不会有新代码在执行,执行的是Lua的虚拟机,用C写出来的虚拟机,这和C#的机制是完全不同的,因为Lua是基于C的脚本语言。

总结

说白了,就是由于Lua这种脚本语言的特性,基于已经存在的某种语言的一种新的语言,这也是脚本语言和C#、C++这类语言的本质区别。当然,Lua虚拟机不仅可以使用C写,也可以用C#写。使用热更新也不一定非要用Lua,Python同样可以,只不过Lua短小精悍,本身代码长度就不是很大,可以从GitHub上看到。

1.Resources 路径 只读 不能动态的修改

存放内容 预制体(prefabs) - 不容易变化的预制体

prefabs打包的时候 会自动过滤不需要的资源 有利于减小资源大小

主线程加载

Resources类的Load方法

文件扮尺颤夹中的内容打包的时候会被压缩和加密

2.streamingAssetsPath 内容会原封不动的打入困族包中

一般建议存放一些二进制文件 (配置文件,unity资源包(AB文件)等)

特点

只读 不可写

主要存放二进厅败制文件

通过WWW类 读取文件(移动端)

3.persistentDataPath 特殊路径 唯一可读写的路径

这个路径在IOS平台是 应用程序的沙盒

但是在安卓Android平台上 它可以是程序的沙盒 也可以是SDcard

并且在打包输出的时候可以设置为沙盒或者SDcard

projectsettings - otherSettings - writePermission

可读写 不同平台路径不同 这个路径下的文件夹 首次运行程序时自动创建

热更新解决方案 将易变资源 还有逻辑 (1.0版本)放在streamingAssetsPath(资源包AB文件 配置表 Lua文本文件)

从网络端下载版本文件 读取出数据 对比当前服务器版本和本地版本版号 例如1.1版本 从服务器下载最新版本

更新的内容 大小等相关数据 MD5验证


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12220004.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存