苏州市建设局网站地址,小程序免费制作平台官网,鉴定手表网站,30秒牢记5个域名临岁之寒简书作者,转载
Xamarin是一项跨平台开发技术#xff0c;之前是收费的#xff0c;而且据说收费不菲#xff0c;所以使用的人数比较少#xff0c;在国内几乎无人问津。后来Xamarin被微软收购#xff0c;现已免费开放#xff0c;相信今后国内的使用人群会大幅地增长…临岁之寒简书作者,转载
Xamarin是一项跨平台开发技术之前是收费的而且据说收费不菲所以使用的人数比较少在国内几乎无人问津。后来Xamarin被微软收购现已免费开放相信今后国内的使用人群会大幅地增长一方面是因为免费的东西总是受人欢迎的另一方面是Xamarin确实提供了一种比较强大的技术来支持跨平台开发这里所指主要是Android和iOS上的开发但其实不止于此。
如今市面上号称可以提供跨平台开发的方案很多比如React Native、PhoneGap、IONIC等这些方面大多数都是基于HTML和JavaScript等技术实现的跨平台开发在开发效率上自然是没话说但是这些技术在性能上则逊色于原生的开发技术而这恰恰是Xamarin得以生存的空间。
Xamarin声称可以获得不差于原生技术的性能甚至在某些方面还有可能超越原生我想这指的应该在是Android方面。我个人分析原因可能是这样的。Xamarin使用C#进行开发好像用F#也可以不过我没有试过据说F#也是一门非常不错以后有时间会学习学习C#默认方法是非虚的即在子类中要重写方法必须在父类中声明为virtual而java默认所有方法都是虚方法所以C#可以减少这方面的开销。其次的话可能是微软毕竟也是老牌的IT公司在系统软件方面的优化能力不容小觑手里的黑科技也是不少敢说这话应该是有底气的。当然这不是最重要的只要能够在大多数情况获得近似于原生的性能便已是非常不错了。
Xamarin主要有这么几项技术Xamarin.Android、Xamarin.iOS和Xamarin.Forms此外还有Xamarin.UWP、Xamarin.Windows、Xamarin.WinPhone等但鉴于目前的市场占有率后面几项可以暂时不去理会。
无论是Xamarin.Android还是Xamarin.iOS本质都是对原生API做了一层C#的封装因此在使用上与原生API会十分相似。这种封装会结合一些C#的语法特性让开发者可以享受C#的语法糖。其中Xamarin.iOS是直接编译成ARM的二进制代码因此执行效率肯定是非常高的。与此不同Xamarin.Android被编译成中间语言Xamarin在APK安装包中会包含一个mono的运行时代码是在mono运行时和安卓本地的运行时上完成工作的可想而知这中间需要付出一些开销而且会使安装包体积增大许多但是考虑到设备的运行空间和存储空间都在高速增长这也不能算是一个特别致命的缺点。 而Xamarin最为关键的技术还不是上面的两项而是Xamarin.Forms。这项技术把IOS、android、UWP等平台的GUI进行了一统地抽象开发者只需要写一套代码编译器会在编译时将界面映射到原先控件上从而获得原生平台的外观和性能。这种做法对于开发者应该是最喜闻乐见的至少我是如此相比于那种运行的虚拟层上的跨平台方式这种做法性能损耗最少。当然损耗小并不代表没有官方也表示Xamarin.Forms不适合用于开发图形界面操作特别复杂且频繁的应用。遇到这种情况我们可以用Xamarin.IOS或Xamarin.Android来解决也就是说Xamarin.Forms可以与Xamarin.IOS或Xamarin.Android在同一个项目结合使用。就以我准备使用Xamarin做输入法为例根据Xamarin的特点我用Xamarin.Forms来做输入法的设置界面节省重复开发一套界面和业务逻辑的精力而用Xamarin.IOS和Xamarin.Android来做输入法界面以发挥最大的性能。目前从我实验的结果看这个想法是可行的。虽然我最开始的想法是连输入法界面也用Forms来做但发现在输入法界面无法使用Forms编写的界面根据我的实验Forms的界面应该只能用于制作Activity的界面而不能做Service的界面也可能是我不知道应该怎么实现所以只好退而求其次不过现在这个结果也是不错的毕竟输入法界面本身对性能的要求就比较高使用更接近原先代码的技术自然要好一些。 至此我使用Xamarin的意图已经很明显了就是想要用于它实现一个跨平台的移动输入法具体的说是岁寒输入法。现在首先准备做的是IOS版的然后再反过来重写Android版本如果日后WindowPhone能有起色并且开放第三放输入法的权限那么基于这些代码实现一个WindowPhone就不会是一件再起炉灶又大费周章的事情。而如果使用原生语言开发的话那每个平台都得重写一套代码代价实在太大了尤其对于个人开发者而言不堪重负这也是为什么Xamarin对我来说特别有吸引力的原因。 跨平台有跨平台的方便自然也有跨平台的难处Xamarin也仅仅提供了一种跨平台开发的手段而已想要将这个手段发挥好最大限度地实现对代码的重用则需要更高的技巧和更多的思考。因此我不推荐初入开发门道的人选择Xamarin在此之前最好对其中一个平台及其开发过程有较深的理解。 Xamarin现在免费开放显然这是微软的移动战略的一部分由于自身操作系统在生态环境上的欠缺迫使微软去推动跨平台技术的发展以希望从其它平台上借势从而反哺自身。在我看来微软的移动操作系统不太可能会有转机但这不意味着Xamarin作为一项技术没有希望。“有心栽花花不开无心插柳柳成荫”的事情从不鲜见只要抓住开发者这帮猢狲微软这棵大树便不会倒相信微软明白这个道理作为开发者也不必过于担心微软过河拆桥。
这篇文章的目的不纯粹在于宣传Xamarin技术毕竟微软没有给我发盒饭但免费用着人家提供的技术顺便给人家宣传宣传的好事也是值得做的。其实我主要是想在此立个字据作为一个开始日后尽可能地把开发过程中得到的经验和心得分享出来既是一种记录也是一种鞭策以此自勉