应用程序开发公司
软件开发

针对您的项目需求及预算规划量身制定方案

个体/中小企业/集团/政府机构/行业组织 了解详情 了解详情

微信小程序和Android开发对比分析

发布时间:2024-01-01 00:00 浏览次数:39

国庆节尾巴上花掉了一点时间念微信小程序的官方文档,在对照之前自己搞得Android,存有了下面的内容。这篇文章将紧紧围绕下面几个方面:


从研发模式(过程)上对照Android和小程序,比较两种”模式”的优劣


从同时实现功能上对照,主要就是看一看微信小程序的局限


自己的一些观点,微信的优势


研发过程上的对照


在我看来,研发一款app,须要搞的主要就是界面布局以及可视化处置,然后就是后面的业务逻辑处置。虽然平台相同,但是任务都就是趋同的。下面从这两个小的方面展开对照一下。


小程序


微信把这个小程序框架称作“MINA”,并声称:


MINA(MINA IS NOT APP) 就是在微信中研发小程序的框架。


MINA的目标就是通过尽可能直观、高效率的方式使开发者可以在微信中研发具备原生APP体验的服务。


MINA提供更多了自己的视图层描述语言WXML和WXSS,以及基于JavaScript的逻辑层框架,并在视图层与逻辑层间提供更多了数据传输和事件系统,可以使开发者可以便利的著眼于数据与逻辑上。


个人真的第三点说道得特别不好。大概说道确切了开发者必须干什么。大概就是以写下Web的方式写下不好前端,然后通过双向数据存取技术和业务端的可视化,业务端的通过javascript代码同时实现业务处置,必要时调用微信USB顺利完成一些处置。


一些生命周期函数


这里所说的生命周期函数就是所指的整个应用领域以及每个页面的声明周期函数,在Android中,对应着App、Activity类,而在小程序中,对应着App和Page两个函数对象(特别注意,javascript就是基于原型和结构器的,而Java就是基于类的,所以这里就造成了一些读法的相同)。以App为基准,下面就是一个代码实例:


App({


onLaunch: function () {


console.log('App Launch')


},


onShow: function () {


console.log('App Show')


},


onHide: function () {


console.log('App Hide')


}


})


1


2


3


4


5


6


7


8


9


10


11


1


2


3


4


5


6


7


8


9


10


11


每个小程序起至出来时就可以存有一个App实例,同理每个页面关上也可以存有一个Page实例(这个链接关上往大幅下滑除了生命周期函数的图解),我们只须要在这个实例中嵌入自己的逻辑即可,唯一相同的就是这就是在javascript这种语言上贴的(java和javascript的区别就像雷锋和雷峰塔,所以这里形式上的相同还是挺大的)。


视图层代码


前面说道了,写下视图层的体验类似于Web前端,主要就是写下多了Android,习惯性地会把界面的样式以及可视化放到一块儿写下(事实上就是你在xml迪尔邦的工作),而在Web端的,须要html和css文件去共同完成。在小程序里面,对应的就是WXML(WeiXin Markup Language)和WXSS(WeiXin Style Sheets),特别注意虽然模式和web很像是,但是在形式上称得上微信自己研发的一套(所以你须要采用他们自己的标签)。具体来讲,你须要搞两件事:


在WXML中通过组件(微信所提供更多的标签)构筑页面结构,并且在其中顺利完成数据存取和事件存取


在WXSS中顺利完成样式的定义,用来掌控WXML中组件的样式。WXSS具备CSS大部分特性,同时也存有部分扩展。


基本上,视图层很像是在写下Web端的。不过你也看见了,和Android比出来,管制因素是微信给你提供更多了组件,然后你最多干嘛样式,更多的像是自定义组件什么的就不可能将了。


逻辑层代码


不同于Android存有一堆的组件(Activity、Service..)去提振逻辑层,小程序就一个Page()函数(相似与App()函数,在框架里面填上逻辑),所以变得很直观。基本上,数据通过双向存取展开传达和创下的,然后在page内可以顺利完成一些可视化处置,更多的能力(出访网络、存储)就是通过微信的API顺利完成的,这些api以wx.结尾,目前来看,不是太多,所以可以很快看看回去,当然也意味著其实可以顺利完成的工作还着实非常有限,这个后面说道。


工程非政府


整体来说,小程序的工程非政府还是蛮准确的,MINA程序涵盖一个叙述整体程序的app和多个叙述各自页面的page,一个MINA程序主体部分由三个文件共同组成,必须放到项目的根目录,就是app.js,app.json,app.wxss,分别用做生命周期函数、配置文件和样式文件,一个MINA页面由四个文件共同组成,就是.js,.wxml,.json,.wxss,分别用做生命周期函数、布局文件、配置文件和样式文件,他们须要通过同名且放到同名文件夹下(便利框架通过名字路由)。较之Android去,套路必须就是紧固而直观得多。


Android


再转头看一看Android研发,忽然真的可以玩玩的简直就是太多了…下面直观叙述一下,确实就是不全系列的。


一些生命周期函数


App、Activity就是确实的,其实套路和小程序还是差不多的。只不过非政府形式就是类而不是函数对象。之前说道了,这是因为Js和Java语言特性导致的。


视图层代码


通常来说,Android的界面在.xml文件中定义,其实认真想一想就可以辨认出,在文件中,我们就是同时定义了布局,和可视化逻辑的,这是因为本质上这些.xml声明都就是View类的子类,我们通过改写View的声明周期方法去顺利完成了对齐的样式(onDraw以及LaoutParams)、以及可视化的定义(各种on..listener)。所以在.xml中更像对这些对象展开一系列实例化。至于双向数据存取,Android也已经开始积极支持了


逻辑层代码


这一层还是必须繁杂得多..放在后面对照来说吧。


工程非政府


…..不敢说道了,一方面读法多,一方面相对于小程序也蛮繁杂的。


功能上的对照


必须怎么对照呢?读Android的研发文档我之前看看了一个星期,而微信小程序的文档也就两三个小时,从体量上说道就晓得有意Android功能必须强悍的多。所以基本上小程序能够搞的以外就是无法搞的,这句话听到出来很废话,但事实上是因为微信给的API非常有限,所以你基本上能够把自己市场需求挑出来,密一下API与否得出,没有得出的话基本上还是算了吧。下面我根据Android的APIguide(科学玩游戏)去罗列下收程序的局限。


自定义控件和布局


这个必须就是最直观的一点,因为实际上你所采用的视图层就是被微信进一步PCB了的,小程序自定义控件还是蛮繁杂的,因为MINA得出了绘图(但是就可以在上作画)和动画(类似Android中的属性动画)的功能,所以或许存有理论上的可能性。


数据存储


这个必须特别拎来说一下,官网原文就是:


每个微信小程序都可以存有自己的本地内存,可以通过wx.setStorage(wx.setStorageSync)、wx.getStorage(wx.getStorageSync)、wx.clearStorage(wx.clearStorageSync)可以对本地内存展开设置、以获取和清扫。


特别注意: localStorage就是永久存储的,但是我们不建议将关键信息全部存有localStorage,以免用户换设备的情况。


所以微信小程序采用的就是内存而非存有一个自己的数据库,这里的内存必须类似android的SharedPreference之类的,用键值对存的。而且小程序就可以对文件展开存有的操作方式。所以说道对于那种须要数据库的应用领域,小程序就是不适宜的。


后台服务,多线程


Android中,Service就是蛮关键的类,然后多线程与异步任务虽然繁杂,但是能够顺利完成许多工作,但是小程序就是不具备这种能力的,当然其实你可以看见你也就是可以异步读取的…所以微信必须就是只提供更多了部分功能的异步能力。


对系统服务的以获取


写下至这里,主要就是想起了之前应用领域须要闹钟模块,须要使系统定时通告应用领域以顺利完成特定的事件。而小程序其实就是PCB在微信这个应用领域之内的应用领域,所以理论上它就是可以赢得系统服务的,但是,如果微信不给USB一切都黑说道,从API文档中可以看见,微信还是提供更多了边线、网络状态等系统信息的,不过像是通告这些服务,就是暂时没的。


与其他应用领域可视化


这里的概念主要就是对应Android的隐式意图和ContentProvider,这里Android提供更多了一种能力,使应用程序之间可以相互调用甚至相互操作方式数据(比如说A关上B的音乐播放器,将A的网页内容留存至B的书签中..这里主要就是场景可以拓展),而微信中,这种能力被具体内容场景化后了,比如说你仍然可以调用相机偷拍(微信调用隐式意图帮忙你同时实现),其他的场景你却无法同时实现,因为微信没搞这一层PCB。


嵌入网页


这一点不晓得必须不要说道..因为微信小程序其实就是一种”嵌入网页”的解决方案?只不过采用了类似hybrid的解决方案。


性能优化


在Android中许多业务已经被MINAPCB了(网络命令、websocket…)所以一方面你同时实现功能的成本减少了,另一方面这一部分优化的空间并不是那么小。


开源库


因为我还是个Js的初学者,所以暂时不晓得如何在微信小程序中采用轮子。但微信和web前端那一套还真不太一样,所以也必须不了轻易采用一些开源库。(10.8更新,今天看见了LeanCloud已经可以积极支持js研发了..也说明了可行性)


最后的总结


如前所说,如果说通常应用领域的容器(不晓得这个比喻恰不恰当)就是操作系统,那么小程序的容器则就是操作系统下的一款应用领域,自然而然的,它本身就是某个应用领域下的一个子模块。而这个模块能够存有多少功能依赖于微信写下了多少USB。


另一方面,因为这个容器就是微信,至少我们可以假设这些USB的跨平台特性,很可能将我们调用的这些USB,可以比我们自己写下android调用系统USB更平衡,甚至依附于微信,我们可能将太少了诸如在某些手机系统中管理应用领域生命周期、防止程序被杀掉的麻烦。


总之,我的体会就是


虽然功能非常有限,但是足够多灵巧研发


在市场需求能被满足用户的情况下,尽量适用于微信研发。

TAG标签:
阅读推荐