Xamarin:与原生SDK和基于JS的框架的比较

本文关键字:JS 框架 比较 原生 SDK Xamarin | 更新日期: 2023-09-27 18:01:08

因此,使用AndroidiOS提供的原生SDK进行编码的主要功能之一是,您不仅可以获得更好的性能,还可以获得每个平台的外观:例如,在iOS上,选项卡导航栏将位于屏幕底部,而在Android中,它位于顶部(是的,我知道它也可以是顶部和底部,但你明白我的意思),或者导航抽屉底座是Android导航风格,而(据我所知)iOS原生sdk中没有类似的东西。我的观点是,你可以通过平台的设计指南感受到平台的不同这是一件好事,因为它让你的应用程序看起来很专业。

因此,考虑到这一点,就性能和保持应用程序的感觉而言,使用TitaniumPhoneGap等基于JS的框架将不是明智的选择。

然后是Xamarin。正如我在这里读到的:Xamarin是如何获得本土外观的?它似乎是本机SDK的C#包装器,据我所知,它应该不会影响性能。但外观和感觉部分在哪里呢。由于XML布局不仅仅是AndroidiOS应用程序的感觉,还有导航(来自控制器类),Xamarin如何处理这些问题?在他们的网站上说,你可以在平台之间共享代码,但这也意味着我必须共享导航系统和类似的东西吗?

最后,为了"不为每个平台编写代码",是否值得不使用原生SDK并使用Xamarin(我在为iOS和Android编写代码方面都没有问题),或者这个框架是针对C#开发人员的,这样他们就不必学习Objective-C或Android了。

任何额外的解释都会很棒,提前谢谢。

Xamarin:与原生SDK和基于JS的框架的比较

我在去年(2013年)构建了一个大型应用程序,其中包含不同的组件:主要是一个API(ASP.NET Web API=>C#)、一个网站(ASP.NET MVC=>C#+AngularJS),以及一个适用于Android(Xamarin.Android=>C#)和iOS(Xamari.iOS=>C#)的应用程序。使用Xamarin的决定有其优点和缺点,但总的来说,我对此非常满意。

正如你在我上面的列表中看到的,几乎所有的事情都是用C#完成的(好吧,网站主要是用JavaScript编写的;-))。这是一种非常成熟的语言,具有非常好的功能(如LINQ)。在我的场景中,很明显:我不需要学习和完善四种语言(Swift/Objective-C、Java、C#、JavaScript),只需要两种:C#和JavaScript。

这在代码共享方面尤其重要:我们的客户端应用程序并不是真正的瘦客户端,因为有些离线功能需要大量的同步逻辑,所以这两个应用程序的UI部分只是其中的一部分。事实证明,我真的可以在iOS和Android上使用90%的非接口代码。这是一个难以置信的巨大好处,因为它不仅与Swift/Objective-C或Java的一些语言独创性有关,还与您在iOS和Android上使用的不同框架有关。使用.NETFramework/Mono作为每个Xamarin应用程序的基础,可以从底层操作系统中抽象数据访问或网络通信等内容。

在速度和UI方面,您没有任何缺点,因为您使用的是1:1的原生API。无论iOS或Android上有什么可用的,也可以通过Xamarin获得。例如,每当苹果发布新版本的iOS时,Xamarin都会在几天内发布更新,所以你不必等待就能使用苹果新推出的功能。

Xamarin在iOS上使用了一种名为"提前编译"的技术,因此您在C#中编写的所有内容都会在部署到您的设备之前编译到本机iOS中。这意味着"原生"Objectice-C应用程序和Xamarin应用程序之间执行的内容没有区别(除了一些小开销,根据我的经验,这一点并不值得注意)。

在Android上,实时编译也与任何其他"原生"Android应用程序一样使用。

这一切都意味着,如果使用Objective-C或Java,您将拥有完全相同的API和可能性。您甚至使用相同的对象来构建具有完全相同类型和名称的UI(有时会稍微优化;)。因此,如果你想为你的应用程序提供选项卡栏导航,你可以使用UITabBarController。请参阅iOS与Xamarin。

在与Xamarin共事多年后,我只有一个缺点:

可能存在内存泄漏。他们的整个样本都是关于防止内存泄漏的基本原理的垃圾。如果您正在使用"昂贵的资源",如应用程序中的媒体文件,您应该从第一天起就小心处理。当我的一个应用程序已经发展到35个不同的(复杂的)对话框时,我不得不解决所有这些问题。这花了我将近两个月的时间,换句话说就是数千美元。他们提供了一些关于它的文档,但工具在这方面很差。错误很可能会出现,而且很难找到(例如)。

但总的来说,选择沙马林是我最好的决定之一。

我已经用Xamarin编码一段时间了。到目前为止一切都很好。我遇到的任何问题我都能解决,因为c#是我的母语。Xamarin站点有许多示例和API参考资料,用于所有平台上的许多功能。

  1. 性能-使用Xamarin可以获得原生性能。没有提问。我一直在用它为我正在开发的一个新应用程序创建音频、视频和照片录制功能。Xamarin将c#代码处理为所有平台的本地字节码。这就是如何实现的。

  2. 外观-你的应用程序外观将是原生的。实际上,你必须使用Android xml格式来制作你的用户界面,IOS也是如此。你仍然可以像在每个平台上一样设计你的元素。Xamarin所做的就是为您将视图链接到事件。

  3. Api-Xamarin的美丽在于Api。他们将整个Android和IOS命名空间移植到了c#。看看他们的文档。

  4. 昂贵-我对Xamarin唯一的问题是它很贵。如果你检查一下他们的定价,那就太离谱了。但你付出什么就得到什么。有支持的优质产品。

  5. C#-Sharp是一种很好的语言,有很多支持。新的async/await解决了整个线程管理问题。Json处理在平台上非常容易。我在Github上上传了几个可以用于许多应用程序的类。

如果你有java背景,那么学习你的c技能将是轻而易举的事。

rdio应用程序是用Xamarin创建的。在安卓和IOS上下载,测试其性能并享受其原生外观。

好运

有更多的互联网内容、帮助和对本机的支持。仅此一点就帮助我做出选择。如果你真的很擅长Xamerin,也许你写的70%的代码都可以被两个应用程序使用,你仍然需要为每个应用程序定制。

但同样,对native的支持是如此之大,以至于如果你遇到问题,其他人也会遇到。

用沙美林,好吧,祝你好运。

当我说应用程序时,我指的是iOS/Android