文档章节

JS延伸到移动端,原生app开发的春天来了(程序员须知)

 开发之禅
发布于 2016/03/03 13:39
字数 2086
阅读 38
收藏 1

   

HTML5Node.js的流行,Javascript这门在互联网初期就已诞生的语言正迸发出勃勃生机,Javascript将前端和后端开发统一起来,“一切皆为JS”看起来只是时间的问题。唯一的障碍是在移动端,因为无论是Android还是iOS平台,当前仍是原生应用大行其道。HTML5曾经被寄予厚望过,但是以Facebook为代表的一批公司在移动端对HTML5技术进行实践的心酸血泪史表明,HTML5可以是原生应用开发的一种有效补充,但远不足以替代原生。但是现在,随着iMAG.js的渐渐流行,这种状况正在发生改变。

开iMAG.js这匹黑马的神秘面纱

iMAG.js是国内的爱码哥移动平台推出的Javscript移动跨平台开发框架,它的特点简单高效,同时又功能强大,可以用Javascript来替代原生开发。iMAG.js的原理和在服务器端运行的Node.js有些相似,都是封装了Javascript引擎,用Javascript去调用底层的API接口。不同的是因为移动应用的控件主要是UI模块、用户交互界面开发,iMAG.js为此引入了XML模板技术,XMLJavascript结合,这样很适合手机界面的展示。


〈下面我们来看iMAG.js是怎么做到替代原生开发,完成HTML5无法完成的事情的。〉                                                            DISCOVERY

1

首先是封装原生UI控件。大家知道手机系统无论是Android还是iOS都有其自身的特色,而这些特色给用户最直观的感受就是用户体验,虽然AndroidiOSApp可以在外观上设计得相似,但用户操作两下之后就能很轻易地区分出哪个是Android哪个是iOS因此发挥系统本身最大功效最根本的做法就是尽可能使用原生UI控件,而iMAG.js框架中所有提供给用户的控件都是原生的,只不过是在上层封装了Javascript接口而已。比如说iMAG.js中的Label控件,在iOS上是调用系统的UILabel控件,而在Android上则是调用的TextView控件,这样在性能和用户体验上就能做到和原生应用完全一致。手机的CPU和内存等资源有限,原生控件在一些细节地方都是有针对性的优化的,比如Android ListView的复用机制,使用ViewHolder来重复使用View,以节省内存使用并且保持滚动的流畅性。同样地,iMAG.js很充分地利用了这些机制,以保证基于iMAG.js开发的App能够和原生App同样操作流畅。

2

其次是统一的开发框架。不同于 HTML5上开发框架纷乱的状况,基于iMAG.js为移动开发量身定做的API,你会始终感到很顺畅,iMAG.js的开发者最直观的感受就是这个框架就是为移动开发准备的。在学习掌握了一个iMAG.js控件之后,即便不看文档,开发者也能大致猜到其他控件怎么用,这得益于iMAG.js良好的设计和封装。iMAG.js框架支持XML模板技术,这样所有的UI控件都可以用XML的方式来书写,开发得到了相当程度的简化。就像搭积木似的,即便是不懂技术的人,也能利用iMAG.js快速搭建出自己想要的App原型,将自己的想法直观地呈现给客户。除了静态界面的展示,与用户交互也是重点。比如说跟后台数据库相结合,界面数据都是来自数据库的动态数据,用户输入的数据能够以同步和异步的方式入库。而所有这些动态的东西,在iMAG.js中都可以通过Javscript脚本来完成,Javascript本身就是一门具有高度扩展性的动态脚本语言。

3

 iMAG.js同样适合开发大型的App项目。一个大的开发团队,除了有开发人员,还有专业的产品经理,专业的美工,专业的测试,成员之间彼此分工协作来完成项目。在精密的分工协作下完成的App通常是一个UI界面很精确的东西,比如美工根据设计做的图,通常是精确到像素的,文字的字号多大,文字图片之间的间距多少都是严格定义的,不能只是一个大致差不多的东西。iMAG.js通过css样式来控制这些内容,实现UI元素的精确布局,而且充分考虑到了手机屏幕大小的不规则性,能对不同平台不同屏幕大小的手机进行自动适配,让跨平台开发变得更容易。在兼容性方面,由于iMAG.js框架自身对AndroidiOS平台良好的兼容性,真正做到了一次开发多处运行,避免了类似于HTML5开发上出现的由于内核的不同在不同手机上展示不一致的情况。再就是iMAG.js提供了离线应用和在线应用两种模式,习惯了web后台开发的开发者可以很轻松地切换到在线应用这种模式下,因为这根本就和开发网页一样。

4

        功能也是用户关心的,到底能有多少种UI展示效果,有多少种手机能力可用,决定了APP开发能够达到的层次。iMAG.js框架本身已经封装了上百种原生控件,比如TextView, ListView, UIScrollView, UITableView这些,支持电话、短信、定位、蓝牙、通讯录等几十种手机能力的使用,而这些本地功能调用都相当容易,比如:$phone.call(‘10086’)表示拨打这个电话。当然iMAG.js本身提供的功能再丰富也有不够用的时候,因为移动开发常常会面对一些复杂的场景,比如多人视频会议,不仅复杂可能还需要跟底层特定硬件结合。幸好iMAG.js是一个跟Node.js类似的东西,Node.js作为后起之秀能够迅速走红很大程度上得益于良好的扩展性,iMAG.js也是一样,iMAG.js支持原生插件,所有“不够”的能力,都可以通过原生插件的方式来实现。如果你想实现一个视频会议的插件,那么可以通过$phone.plugin(‘MyV己用原生代码实现的视频会议模块,这里MyVideoMeeting是一个在爱码哥平台发布的插件代码。当然你其实并不需要自己专门去开发一个视频会议的模块,因为这种功能模块往往是现成的,你只需要向第三方购买相应的SDK即可。

5

       前面介绍了iMAG.js看起来比较“酷”的地方,但你可能还有疑虑:既然这么高大上那我用iMAG.js开发一个微信怎么样?iMAG.js努力的方向是能够完全替代原生App的开发,即便是使用原生来开发也是以插件的形式集成进来,这样模块都是可以复用的,因此用iMAG.js来开发微信类的应用是完全可行的,并且官方已经有这样的案例。因此iMAG.js提供了一种方式,能够将Javascript语言引入到移动端,并且通过插件化模块化的方式将移动领域各种原本分散的解决方案打包成一个整体呈现给开发者和企业,让企业能够通过爱码哥平台快速实现移动化。

如有转载请备注:本文来自爱码哥CTO邱杨(Terry)同学,微信公众号“爱码哥”(微信公众号:iMAG_app)

本文转载自:www.imagapp.com

共有 人打赏支持
粉丝 0
博文 1
码字总数 0
作品 0
崇明
私信 提问
大前端时代,我为什么支持前端程序员学习原生技术?

在上一篇文章中,我分析了大前端的趋势,我建议原生程序员拿出3分精力来学习大前端技术。本文将进一步分析这一趋势,并针对前端程序员(FE)给出一些建议。在此之前,先给大家介绍下大前端。...

singwhatiwanna
10/15
0
0
javascript统一世界?

[到微信关注我][1]今天facebook将react native框架的源码开源,瞬间火得一塌糊涂,目前github上的star已经快7000了。javascript作为这个框架的开发使用语言又一次出现在人们面前。这几年jav...

卢勇福
2015/03/28
0
0
最火移动端跨平台方案盘点:React Native、weex、Flutter

1、前言 跨平台一直是老生常谈的话题,cordova、ionic、react-native、weex、kotlin-native、flutter等跨平台框架的百花齐放,颇有一股推倒原生开发者的势头。 为什么我们需要跨平台开发? ...

JackJiang2011
08/13
0
0
为什么JavaScript是你应当学习的下一个(或第一个)编程语言

原文出处:dentedreality 译文出处:腊八粥 本文是翻译,版权归原作者所有 我已经被多次问到,如果我刚刚开始,我应当学习什么编程语言,答案一定是JavaScript,下面是为什么: 最简单的开发...

dentedreality
2014/12/02
0
0
JavaScript(React Native、Node.js等)移动、服务端通吃的全栈语言

作者:李宁老师 东北大学计算机专业硕士。曾任沈阳东软股份项目经理。51CTO学院签约讲师。从事软件研究和开发超过20年。长久以来一直从事Java、Android、iOS、C++、Swift、Objective-C以及跨...

androidguy
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JAVA设计模式之模板方法模式和建造者模式

一、前期回顾 上一篇《Java 设计模式之工厂方法模式与抽象工厂模式》介绍了三种工厂模式,分别是工厂方法模式,简单工厂方法模式,抽象工厂模式,文中详细根据实际场景介绍了三种模式的定义,...

木木匠
51分钟前
2
0
C中的宏的使用(宏嵌套/宏展开/可变参数宏)

基本原则: 在展开当前宏函数时,如果形参有#或##则不进行宏参数的展开,否则先展开宏参数,再展开当前宏。 #是在定义两边加上双引号 #define _TOSTR(s) #sprintf(_TOSTR(test ABC))pr...

SamXIAO
今天
4
0
SpringBoot 整合异步调用方法

1. 在 SpringBoot 主类上使用 @EnableAsync 注解,开启异步调用功能 package com.codingos.springbootdemo;import org.springframework.boot.SpringApplication;import org.springfra......

北漂的我
今天
1
0
0015-如何使用Sentry管理Hive外部表权限

1.文档编写目的 本文档主要讲述如何使用Sentry对Hive外部表权限管理,并基于以下假设: 1.操作系统版本:RedHat6.5 2.CM版本:CM 5.11.1 3.集群已启用Kerberos和Sentry 4.采用具有sudo权限的...

Hadoop实操
今天
5
0
边缘计算与数据中心的发展趋势

导读 Gartner研究表明,人工智能、物联网和5G助力下一代商业创新,由此产生大量数据,2020年前企业将使用超过75亿台联网设备。 在几乎每个方面,社会的节奏都正变得更快。我们希望客户服务问...

问题终结者
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部