移动互联网开发技术(移动互联网开发技术是什么)

Mark wiens

发布时间:2022-08-03

移动互联网开发技术(移动互联网开发技术是什么)

 

移动应用

开发技术介绍

原生开发

使用Android和IOS平台支持的语言和开发工具,直接调用系统平台提供的ADK API。Android使用Java, Kotlin语言直接调用系统ADK进行开发应用程序。IOS通过使用Objective-C或Swift语言直接调用iOS SDK开发的应用程序。

原生的优势

  1. 调用系统平台的全部功能(摄像头,GPS,手势, 话筒...)
  2. 程序速度快,性能高,用户体验好。

原生的缺陷

  1. 开发成本大,需要分别招Android和IOS程序员进行开发和维护。
  2. 动态化页面能力弱,现在商业应用越来越庞大和复杂,新增任何的修改都需要发版本。界面动态能力弱,不够灵活。

跨平台技术Hybrid

h5 + 原生混合开发

  1. 通过原生的网页加载控件WebView (Android)或WKWebView(iOS)来加载,H5部分是可以随时改变而不用发版,动态化需求能满足;同时,由于h5代码只需要一次开发,就能同时在Android和iOS两个平台运行,这也可以减小开发成本。其余的功能就用原生的方式进行开发。目前混合开发框架的典型代表有:Cordova、Ionic 和微信小程序。

混合开发的原理

混合开发中,H5代码是运行在WebView中,而WebView实质上就是一个浏览器内核,其JavaScript依然运行在一个权限受限的沙箱中,所以对于大多数系统能力都没有访问权限。 无法访问文件系统、不能使用蓝牙等。混合框架会在原生代码中预先实现一些访问系统能力的API, 然后暴露给WebView以供JavaScript调用,建立起他们之间的Bridge, JsBridge。

混合应用的优点是动态内容是H5,web技术栈,社区及资源丰富,缺点是性能不好,对于复杂用户界面或动画,WebView难以理想。

React Native、Weex及快应用

  1. React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架 React 在原生移动应用平台的衍生产物,目前支持iOS和Android两个平台。RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。

JavaScriptCore 是一个JavaScript解释器,它在React Native中主要有两个作用:

  1. 为JavaScript提供运行环境。
  2. 是JavaScript与原生应用之间通信的桥梁,作用和JsBridge一样,事实上,在iOS中,很多JsBridge的实现都是基于 JavaScriptCore

而RN中将虚拟DOM映射为原生控件的过程中分两步:

  1. 布局消息传递; 将虚拟DOM布局信息传递给原生
  2. 原生根据布局信息通过对应的原生控件渲染控件树

至此,React Native 便实现了跨平台。 相对于混合应用,由于React Native是原生控件渲染,所以性能会比混合应用中H5好很多,同时React Native使用了Web开发技术栈,也只需维护一份代码,同样是跨平台框架。

Weex

Weex是阿里巴巴于2016年发布的跨平台移动端开发框架,思想及原理和React Native类似,最大的不同是语法层面,Weex支持Vue语法和Rax语法,Rax 的 DSL(Domain Specific Language) 语法是基于 React JSX 语法而创造。与 React 不同,在 Rax 中 JSX 是必选的,它不支持通过其它方式创建组件,所以学习 JSX 是使用 Rax 的必要基础。而React Native只支持JSX语法

快应用

* 快应用是华为、小米、OPPO、魅族等国内9大主流手机厂商共同制定的轻量级应用标准,目标直指微信小程序。它也是采用JavaScript语言开发,原生控件渲染。

* React Native和Weex的渲染/排版引擎是集成到框架中的,每一个APP都需要打包一份,安装包体积较大;而快应用渲染/排版引擎是集成到ROM中的,应用中无需打包,安装包体积小,正因如此,快应用才能在保证性能的同时做到快速分发

移动应用

JavaScript开发+原生渲染的方式主要优点如下:

* 采用Web开发技术栈,社区庞大、上手快、开发成本相对较低。

* 原生渲染,性能相比H5提高很多。

* 动态化较好,支持热更新。

缺陷:

1. 渲染时需要JavaScript和原生之间通信,在有些场景如拖动可能会因为通信频繁导致卡顿。

2. JavaScript为脚本语言,执行时需要JIT(Just In Time),执行效率和AOT(Ahead Of Time)代码仍有差距。

3. 由于渲染依赖原生控件,不同平台的控件需要单独维护,并且当系统更新时,社区控件可能会滞后;除此之外,其控件系统也会受到原生UI系统限制,例如,在Android中,手势冲突消歧规则是固定的,这在使用不同人写的控件嵌套时,手势冲突问题将会变得非常棘手

QT Mobile

自绘UI+原生。这种技术的思路是,通过在不同平台实现一个统一接口的渲染引擎来绘制UI,而不依赖系统原生控件,所以可以做到不同平台UI的一致性。注意,自绘引擎解决的是UI的跨平台问题,如果涉及其它系统能力调用,依然要涉及原生开发。

Flutter就属于这一类跨平台技术,没错,Flutter正是实现一套自绘引擎,并拥有一套自己的UI布局系统。

QT虽然在PC端获得了巨大成功,备受社区追捧,然而其在移动端却表现不佳,在近几年,虽然偶尔能听到QT的声音,但一直很弱,无论QT本身技术如何、设计思想如何,但事实上终究是败了.

Flutter出世

Flutter是Google发布的一个用于创建跨平台、高性能移动应用的框架。Flutter和QT mobile一样,都没有使用原生控件,相反都实现了一个自绘引擎,使用自身的布局、绘制系统。

从Github上来看,目前Flutter活跃用户正在高速增长。从Stackoverflow上提问来看,Flutter社区现在已经很庞大。Flutter的文档、资源也越来越丰富,开发过程中遇到的很多问题都可以在Stackoverflow或其github issue中找到答案

值得注意的是Flutter的Release包默认是使用Dart AOT模式编译的,所以不支持动态化,但Dart还有JIT或snapshot运行方式,这些模式都是支持动态化的.

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186