最近有兴趣了解一下Mono for Andriod,也就是使用.NET平台来开发Andriod程序。Mono for Android API 几乎映射标准的Andriod API.例如,两边API几乎所有相同的类、方法和字段都相同。主要区别之一,就是Mono for Android使用属性和委托在Java中不存在。我喜欢紧密相关的两个api,因为这使它容易地在它们之间来回切换,并使用已存在标准Android API文档。我能够成功完成我的项目使用Android,但仍有几个困难....以下列出了关于Mono for Android的利弊:

优势:

1. 平台间共享代码。如果配合使用Mono Touch API与Windows Phone API,您可能重用业务逻辑代码为iPhone和Windows Phone平台所用。这是可能的,因为一切都可以进行使用单一的编码,常见的编程语言而不是3种不同的编程语言。请注意,这虽然只适用于业务逻辑代码;而每个平台的呈现代码将因为不同平台APIs的有所差异。在我看来重用代码的能力是使用Mono fo Android的最佳优势。

2. 使用你已有的.NET技能。如果你在团队中比较熟悉.net平台而不是Java平台,那么用Mono for Android比较合适。但是,我认为这个优势已是有所减少的事实,C#和Java是如此相似。有可能在使用Mono Touch,因为这消除了需要学习的Objective- C构成一个学习曲线,所以比有Java更大的优势。

劣势:

1. 性能问题。例如垃圾回收,Mono for Android 声称支持垃圾回收,但也有需要注意的一些严重限制。"GC不完整视图的进程,可能无法运行在内存不足时,由于GC不知道内存不足。"因为这通常需要手动,每当创建一个activity运行垃圾回收或销毁,以释放未使用的内存。否则,可能导致内存不足的异常。 我自己也不止一次碰到了这个问题,不得不使用替代方法来解决问题。

关于内存管理: 
许多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的垃圾回收

(本作者:Xamarin团队 对内存资源管理进行了优化:详见:

http://developer.xamarin.com/guides/cross-platform/deployment,_testing,_and_metrics/memory_perf_best_practices/

)

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

(转)Mono for Android 优势与劣势的更多相关文章

  1. Mono for Android 优势与劣势

    原文:Mono for Android 优势与劣势 最近有兴趣了解一下Mono for Andriod,也就是使用.NET平台来开发Andriod程序.Mono for Android API 几乎映 ...

  2. 【月入41万】Mono For Android中使用百度地图SDK

    借助于Mono For Android技术,.Net开发者也可以使用自己熟悉的C#语言以及.Net来开发Android应用.由于Mono For Android把Android SDK中绝大部分类库都 ...

  3. Android(1)—Mono For Android 环境搭建及破解

    0.前言 最近公司打算开发一款Android平台的简单报表查询软件,因本人之前一直是.NET开发的,和领导商定之后决定采用Mono For Android 进行开发,暂时采用破解版进行开发: 下文是记 ...

  4. Android(4)—Mono For Android 第一个App应用程序

    0.前言 年前就计划着写这篇博客,总结一下自己做的第一个App,却一直被新项目所累,今天抽空把它写完,记录并回顾一下相关知识点,也为刚学习Mono的同学提供佐证->C#也是开发Android的! ...

  5. mono for android 获取手机照片或拍照并裁剪保存

    axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  6. mono for android Json 上传文件

    void button_Click(object sender, EventArgs e) { string Url = "上传地址,服务器端负责接收"; byte[] fbyte ...

  7. mono for android 用ISharedPreferences 进行状态保持 会话保持 应用程序首选项保存

    由于项目需要 要保持用户登录状态 要进行状态保持 用途就好像asp.net的session一样 登录的时候进行保存 ISharedPreferences shared = GetSharedPrefe ...

  8. mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习

    以前的我是没有做笔记的习惯的,学习了后觉得自己能记住,但是最近发现很多学的东西都忘记了,所有现在一有新的知识,就记下来吧. 最近又做一个mono for android 的项目 这次调整比较大,上次做 ...

  9. mono for android学习过程系列教程(1)

    直接进入主题,关于mono for android的学习,首先配置好环境,如何配置环境,度娘谷歌一大堆,记得使用破解版. 我自己是百度“黑马四期”传智播客的视频,里面有破解版开发环境的软件. 今天直接 ...

随机推荐

  1. &&与&

    if((2>1)&&(4>3))System.out.printf("两边都是true"); else   System.out.println(&qu ...

  2. 从源码角度理解android动画Interpolator类的使用

    做过android动画的人对Interpolator应该不会陌生,这个类主要是用来控制android动画的执行速率,一般情况下,如果我们不设置,动画都不是匀速执行的,系统默认是先加速后减速这样一种动画 ...

  3. favicon.ico显示,favicon显示,favicon图标显示

    favicon.ico显示,favicon显示,favicon图标显示 >>>>>>>>>>>>>>>> ...

  4. c# 获取MAC IP TCP列表

    转载自baidu:http://hi.baidu.com/jackeyrain/item/ff94efcfd5cf3a3099b498e9 namespace Public { public clas ...

  5. ListView优化分页优化

    缘由 我们在用ListView展现数据的时候.比如展现联系人,如果联系人太多就会出现卡的现象,比如如果有1000多条数据,从数据库里查询,然后装载到List容器这段时间是比较耗时的.虽然我们可以用as ...

  6. windows server 2003 系统重装蓝屏

    错误码:0X0000007B 这个代码和硬盘有关系,不过不用害怕,不是有坏道了,是设置问题或者病毒造成的硬盘引导分区错误.如果您在用原版系统盘安装系统的时候出这个问题,那说明您的机器配置还是比较新的, ...

  7. 清楚form表单数据的便捷jQuery之法

    有时候可能需要实现这样的效果:注册表单或者地址表单等填写多个记录之后,想要清除重新填写,如果一个个删除非常麻烦,因此这时清除按钮非常必须.接下来为您详细介绍两个自己经历的便捷方法,需要了解的朋友参考下 ...

  8. autoreleasepool的笔记

    1.autoreleasepool总是会被问到,放在自动释放池中的对象合适被释放?理解不正确的答案:{}出了大括号.出了作用域等等.个人认为参考答案是,1.在不是手动添加的AutoreleasePoo ...

  9. Win32中GDI+应用(三)---Graphics类

    在我理解看来,Graphics是一个device context和你的drawing conetent之间的一个中介.它存储了device context的相关属性,以及drawing content ...

  10. printf 输出格式

    printf 输出格式C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型,其中方括号[]中的项为可选项.各项的意义介绍如下:1.类型类型字符用以表示输出数据的类型,其格式符 ...