Mono for Android 优势与劣势
最近有兴趣了解一下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的垃圾回收。
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 优势与劣势相关推荐
- ipad和android平板应用程序,安卓平板相比iPad有哪些优势和劣势?
平板只有两种,一种是iPad,另一种是其他.这句话,或许明后两年左右改变说法. 手机从16:9发展到全面屏,干掉了之前的MAX类型大屏手机,但是始终没有干掉平板,哪怕是7英寸左右的Mini类型的平板. ...
- HTML5开发APP有哪些优点和缺点?HTML5优势和劣势大对比
HMTL5开发APP有哪些优点和缺点?对比起来看,HTML5开发APP的优势明显大于劣势.比如HTML5有跨平台,开发成本低,推广更容易等等优点,同时它也有着一些缺点,比如容易受到网络的限制,用户体验 ...
- 三谈 钉钉、企微、飞书 的不同:优势即劣势
最近几周和好几位钉钉.飞书的高管都有交流,所以继续聊几句钉钉.企微.飞书给我的启发. 一句话总结,就是: 高水平的竞争,优势即劣势,所以只能把它看做自己的特点,并找到独特的定位,再等对手犯错. 先来看 ...
- monocross 环境搭建:MonoTouch Mono for Android
monocross 中各个平台环境不同: 针对ios的MonoTouch只能在OSX上弄.Android 的Mono for Android在mac 及pc机上都可以..... 安装MonoTouch ...
- python编程语言能干什么-python编程语言的优势与劣势--python能干啥
首先先发表小编的观点吧嘿嘿:python并不适合作为第一编程语言,但是第二编程语言的首选 (哥哥们先别喷我,且听我慢慢说来~~~) 先解释一下啥是第一第二编程语言吧: 通常从事开发的程序员都会学不止一 ...
- 我的第一个 Mono for Android 应用
我的第一个 Mono for Android 应用 Mono for Android 初体验, 学习怎么使用 Mono for Anrdoid 创建 android 应用, 如何使用 Intent 启 ...
- C#开发Android应用的必备——Mono for Android V1.0 发布
Mono for Android V1.0 正式发布啦! Mono for Android就是原先的MonoDroid,由于商标问题(名称中含有Droid),现在改名为Mono for Android ...
- RDB 文件的优势和劣势
一.优势 1.RDB 是一个非常紧凑(compact)的文件,它保存了redis 在某个时间点上的数据集.这种文件非常适合用于进行备份和灾难恢复. 2.生成RDB 文件的时候,redis 主进程会fo ...
- 解决Mono for android的xml编辑器无法代码完成的问题
这两天在讲使用.Net开发Android的Mono for android技术,发现使用的开发工具在停止调试的时候特别卡,能卡上几十秒钟,而且经常弹出报错的对话框,严重影响心情,因此昨天就下载安装了最 ...
最新文章
- 【笔记】与Android酱的第一周
- 一个帖子学会Android开发四大组件
- Android 通过局域网udp广播自动建立socket连接
- 实现ModelDriver接口的功能(转)
- 【CodeForces - 1051B】Relatively Prime Pairs (构造,思维,素数,水题)
- DNSChanger路由器DNS劫持木马 新版本正在攻击家庭及小企业路由器 企图推送广告...
- oracle的aud文件,oracle asm实例的aud文件有关问题
- 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)...
- 如何用计算机克数和斤换算,质量(重量)单位换算计算器
- 易捷文件共享web服务器 v3.5,易捷文件共享Web服务器 官方版
- Windows update 注册表项
- Wifi-direct 相关记录
- 设计模式之禅【门面模式】
- linux usleep函数,linux下,测试usleep函数对CPU占用率的影响
- EduCoder-程序设计技术R-循环结构程序设计2-(第1关:C循环-求平均成绩)(第2关:C循环-求各位数字)(第3关:C循环-求阶乘之和)(第4关:C循环-水仙花数)(第5关:C循环
- python编程软件免费吗_Python Mac下载-Python for Mac(Python编程工具) v3.10.0a2免费版
- 工业互联 智造未来 “2018 智造中国峰会•上海松江” 在上海市松江区隆重召开
- ODOO教程_1、ODOO是什么
- java9-模块化open/opens/use/provides...with...
- linux menuconfig搜索,Linux make menuconfig查找并快速跳转指定驱动选项
热门文章
- python email模块详解_python email模块
- python3安装requests_小小-Centos7安装Python3并安装Requests的方法
- fastjson反序列化过滤字段属性_Fastjsonlt;=1.2.47反序列化漏洞源码分析及复现
- 1.790E308java_java基础知识总结
- 税控盘抄报税显示服务器为空,税控盘显示离线是什么原因造成的?怎么处理?...
- 多个ai文件合并成pdf_如何将多个文档合并成PDF?
- python文件路径改了需要重新配置环境吗_python自学环境配置
- java手机大头_Java也强大:
- linux源码scripts目录是什么,linux-kernel – linux / scripts / recordmcount:没有这样的文件或目录...
- mac json工具_工具类封装的思路 | 钉钉群机器人为例