Java原生的开发会把业务代码压缩进此文件。这个文件也是安卓虚拟机执行对应的应用时候,能找到入口,起始点。但是,Mono项目的业务代码没在这个里面,记住,它是皮影戏。这个是皮影。真正的操作者,幕后凶手,在后台!!!
上法宝:
Xamarin生成的apk包中,也是这样。
lib目录提供了运行时需要的lib 库,如Mono运行时。
注意下面的那俩文件,就是皮影戏的杆儿,映射工具。
真正的执行代码在????
在 lib 中或者在assemblies中!!
为啥是或者?因为企业版的Xamarin,支持使用NDK将应用打包成Native应用!!!
有的人纠结那个calsses.dex文件,作为入口,说Android的应用不是非线性耦合的模块应用吗?是的,但是,这非线性针对的是系统,或者是程序块内部,而不是系统跟程序应用之间的描述。应用插入到系统上,那个自描述文件 AndroidManifest.xml 提供了程序的入口描述。
而calsses.dex被安卓虚拟机 Dalvik 执行后,会给这个程序分配对应的程序运行域,
(摘自:腾飞(Jesse))关于Dalvk虚拟机与Java运行环境的区别大家注意第2点和第7点有助于我们理解Xamarin.Android的工作机制
好,到此,你就知道了吧,那个classes.dex 就是给Zygote提供孵化器应用的............Zygote(受精卵。很形象。应用像是受精卵,通过他暖化出来了个小鸡应用)
KO!!!!!!!到此,你也就基本知道,这玩意儿是怎么运行的了吧。。。。没错,记住,皮影戏!!!!!!!!!!!!!!!
-----------------------------垃圾回收----------------------------------------
关于这个话题,其实没必要过分讨论,因为既然是皮影戏,那么肯定两边交互的时候 肯定不如原生,如果你纠结这个,那么请学好Java去吧。
然后就是硬件的问题,从09年到现在,内存啊 CPU什么的再移动终端上换了好几代了。从单核到双核到四核到八核。。。。。硬件的提升简直是要亲命的。
花好几个月优化的项目,可能新一代的的硬件直接藐视了以前的项目性能问题。。。(当然,不能不关注性能。在一些游戏 视频等对硬件渲染要求较高的时候,就能体现出性能的致命性!!)
好了看到这里,你也没必要继续往下看了。下面的是基于Xamarin的内存管理。
因为是皮影戏,两边其实是互相持有对方的信息的。耍皮影的根据皮影反馈的信息,进行下一步如何操作,皮影接到命令,就会在屏幕上显示对应的动作。。。
摘抄:
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的垃圾回收。
其实,Mono已经对垃圾回收机制,一直在优化。
针对iOS的MonoTouch目前支持了分代式垃圾回收器(generational garbage collector)SGen。直到不久之前,Sgen还只是完整版本Mono中的一个实验性部分。伴随着垃圾回收器一同到来的,还有一个为iOS准备的 内存分析器(Memory Profiler),它可以从MonoDevelop集成开发环境中访问到。
分代式垃圾回收器Sgen取代了Mono中传统的Boehm垃圾回收器。虽然Sgen预计会有更好的性能,但其保守式扫描仍然会给它带来一些阻碍。预计将来Sgen会切换到精确的堆栈标记系统,这样应当可以大幅度减少产生的内存碎片。