最近有兴趣了解一下Mono for Andriod,也就是使用.NET平台来开发Andriod程序。Mono for Android API 几乎映射标准的Andriod API.例如,两边API几乎全部相同的类、方法和字段都相同。主要区别之一,就是Mono for Android使用属性和委托在Java中不存在。我喜欢紧密相关的两个api,由于这使它容易地在它们之间来回切换,并使用已存在标准Android API文档。我可以成功完成个人项目使用Android,但仍有几个困难....如下列出了关于Mono for Android的利弊: php
优点:html
1. 平台间共享代码。若是配合使用Mono Touch API与Windows Phone API,您可能重用业务逻辑代码为iPhone和Windows Phone平台所用。这是可能的,由于一切均可以进行使用单一的编码,常见的编程语言而不是3种不一样的编程语言。请注意,这虽然只适用于业务逻辑代码;而每一个平台的呈现代码将由于不一样平台APIs的有所差别。在我看来重用代码的能力是使用Mono fo Android的最佳优点。android
2. 使用你已有的.NET技能。若是你在团队中比较熟悉.net平台而不是Java平台,那么用Mono for Android比较合适。可是,我认为这个优点已经是有所减小的事实,C#和Java是如此类似。有可能在使用Mono Touch,由于这消除了须要学习的Objective- C构成一个学习曲线,因此比有Java更大的优点。编程
劣势:c#
1. 性能问题。例如垃圾回收,Mono for Android 声称支持垃圾回收,但也有须要注意的一些严重限制。"GC不完整视图的进程,可能没法运行在内存不足时,因为GC不知道内存不足。"由于这一般须要手动,每当建立一个activity运行垃圾回收或销毁,以释放未使用的内存。不然,可能致使内存不足的异常。 我本身也不止一次碰到了这个问题,不得不使用替代方法来解决问题。 api
关于内存管理:
许多Mono for Android被分配对象为包装Java对象作为它们的表明。 这时会发生什么:每次你分配一个包装过类型相对应Java类型,就建立两个对象:
1). Java对象在Java堆中
2). Mono代理对象在Mono堆中
Mono for Android不能确保这两个对象相互引用后长时间存活。那就是,Mono的垃圾回收引用一个对象,Java端的对象将一直活着,反之亦然。这个代理对象的建立mandroid.exe是工具编译时完成。 然而,GC是懒惰的,按需运行的集合,而不是简单地对象超出范围时候。 那么这意味着跨虚拟机的垃圾至少比通常更多,这是不可避免的。因此,为了临时使用时分配一个大数字对象,显示释放那些对象所需的资源是宝贵的。约定的方法使用using关键字来new一个object,使用using子句来隐式释放目标的new object是有必要的。释放Mono端的包装的Java-VM收集的对象,从而来防止太多的临时对象关联在一块儿很长时间。编程语言
去官方网站了解更多关于Mono for Android的垃圾回收。ide
(本做者:Xamarin团队 对内存资源管理进行了优化:详见:工具
http://developer.xamarin.com/guides/cross-platform/deployment,_testing,_and_metrics/memory_perf_best_practices/post
)
2. 第三方JAR Libraries - Mono for Android为Android 4.2版本推出绑定任意JAR文件的支持。JAR绑定项目是一个蛮好的概念,但不幸的是这是不可靠的。对于简单JAR files可行,但每每不支持在更复杂的Java库的JAR文件。Xamarin提供一些关于如何排除绑定错误jar的文档,但它并不老是帮助我。在将来版本也许这项功能将改善,但目前其难以使用,缺少文档,还有几个著名的bugs。
3.Bugs-- 有大量的bug在Mono for Android。嗯,也许重要的是太强的一个词,但确定的更加稳定的需使用Java相对于Mono for Android。 我碰见的最严重的两个bug有:日期时间。如今返回错误的UTC时区时间,并使用SSL与WebClient时会致使异常。
愈来愈多的趋势是使用标准的Android和Java API来开发Android应用,而不是使用c#和Mono Android API。这么说是由于,第一,Java有较好的开发社区支持,第二,使用Java可能会致使问题比较少。然而,可以共享相同的代码在Android,iPhone,而Windows Phone等平台是吸引人的,因此某些状况下须要权衡。
做者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。
该文章也同时发布在个人独立博客中-Petter Liu Blog。