九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C#移動(dòng)跨平臺(tái)開發(fā)(2)Xamarin移動(dòng)跨平臺(tái)解決方案是如何工作的?


來源:騰飛(Jesse)

鏈接:http://www.cnblogs.com/jesse2013/p/how-xamarin-works.html


概述


微軟宣布了開放.NET框架源代碼并且會(huì)為Windows、Mac和Linux開發(fā)一個(gè)核心運(yùn)行時(shí)(Core CLR),這也是開源的!IT媒體網(wǎng)站紛紛轉(zhuǎn)載,博客園的C#開發(fā)者們熱淚盈眶(泥煤都等這一天好久了?。?/p>


與此同時(shí)VS2015預(yù)覽版更是直接集成了Android模擬器,但是其實(shí)里面并沒有說集成IOS模擬器,我不知道大家是怎么得出可以直接用VS來開發(fā)Android和IOS應(yīng)用的。不管怎么說,這都是個(gè)好消息。那么問題來了,C#如何來開發(fā)Android和IOS應(yīng)用?微軟會(huì)怎么做我們不確定,但是我們倒是可以來看看Xamarin是如何做的。


Android系統(tǒng)架構(gòu)


我想下面這張圖做Android開發(fā)的同學(xué)應(yīng)該很熟悉,下面我們就通過來了解Android系統(tǒng)的架構(gòu)入門來看看Xamarin會(huì)怎么樣去做?



  • Linux Kernel 操作系統(tǒng)層


  • Libraries And Android Runtime 各種庫和Android 運(yùn)行環(huán)境


  • Application Framework 應(yīng)用框架層 (由Java編寫)


  • Applications 應(yīng)用程序?qū)樱ㄓ蒍ava編寫并且在Dalvk虛擬機(jī)來運(yùn)行)


現(xiàn)在做Android開發(fā)的同學(xué)只要熟悉這些應(yīng)用框架層的一些接口和類庫就可以給方便的來實(shí)現(xiàn)自己的Android應(yīng)用程序。


關(guān)于Dalvk虛擬機(jī)與Java運(yùn)行環(huán)境的區(qū)別


  1. Dalvik主要是完成對(duì)象生命周期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。


  2. Dalvik負(fù)責(zé)進(jìn)程隔離和線程管理,每一個(gè)Android應(yīng)用在底層都會(huì)對(duì)應(yīng)一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例,其代碼在虛擬機(jī)的解釋下得以執(zhí)行。


  3. 不同于Java虛擬機(jī)運(yùn)行java字節(jié)碼,Dalvik虛擬機(jī)運(yùn)行的是其專有的文件格式


  4. Dex文件格式可以減少整體文件尺寸,提高I/o操作的類查找速度。


  5. 是為了在運(yùn)行過程中進(jìn)一步提高性能,對(duì)dex文件的進(jìn)一步優(yōu)化。


  6. 所有的Android應(yīng)用的線程都對(duì)應(yīng)一個(gè)Linux線程,虛擬機(jī)因而可以更多的依賴操作系統(tǒng)的線程調(diào)度和管理機(jī)制


  7. 有一個(gè)特殊的虛擬機(jī)進(jìn)程Zygote,他是虛擬機(jī)實(shí)例的孵化器。它在系統(tǒng)啟動(dòng)的時(shí)候就會(huì)產(chǎn)生,它會(huì)完成虛擬機(jī)的初始化,庫的加載,預(yù)制類庫和初始化的操作。如果系統(tǒng)需要一個(gè)新的虛擬機(jī)實(shí)例,它會(huì)迅速復(fù)制自身,以最快的數(shù)據(jù)提供給系統(tǒng)。對(duì)于一些只讀的系統(tǒng)庫,所有虛擬機(jī)實(shí)例都和Zygote共享一塊內(nèi)存區(qū)域。


大家注意第2點(diǎn)和第7點(diǎn)有助于我們理解Xamarin.Android的工作機(jī)制。


Xamarin.Android 架構(gòu)



Java編寫的Android應(yīng)用程序通過調(diào)用 Android.* 和 Java.* 這些命名空間下的類來實(shí)現(xiàn)一些系統(tǒng)的功能包括:聲音、顯示、OpenGl等一些通過Java API不能實(shí)現(xiàn)的功能或者說是與硬件、系統(tǒng)平臺(tái)相關(guān)的功能。那這里的問題是當(dāng)我們用C#來編寫的時(shí)候,這些功能怎么去調(diào)用?C#寫的Android 應(yīng)用程序又是如何初始化的?


Android Callable Wrappers (ACW)


當(dāng)一個(gè)C#開發(fā)的Android程序運(yùn)行的時(shí)候,除了一個(gè)Dalvik的虛擬機(jī)實(shí)例,還有一個(gè)Mono的虛擬機(jī)實(shí)例在運(yùn)行。那個(gè)Dalvik虛擬機(jī)實(shí)體就像一個(gè)宿主,我們的APP在宿主上運(yùn)行,而我們所有用C#寫的方法都會(huì)以ACW的形式被調(diào)用。在Java代碼中以native的式式invoke,就像invoke其它C或者C++的代碼一樣。


Momodroid.exe 在編譯階段會(huì)為我們的C#類生成對(duì)應(yīng)的ACW。


using System;

  using Android.App;

  using Android.OS;

  

  namespace Mono.Samples.HelloWorld

  {

          public class HelloAndroid : Activity

          {

                 protected override void OnCreate (Bundle savedInstanceState)

                 {

                         base.OnCreate (savedInstanceState);

                         SetContentView (R.layout.main);

                 }

         }

}


對(duì)應(yīng)生成的ACW代碼:


package mono.samples.helloWorld;

  

  public class HelloAndroid

          extends android.app.Activity

  {

          static final String __md_methods;

          static {

                  __md_methods =

                          'n_onCreate:(Landroid/os/Bundle;)V:GetOnCreate_Landroid_os_Bundle_Handlern' +

                         '';

                 mono.android.Runtime.register ('Mono.Samples.HelloWorld.HelloAndroid, HelloWorld, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', HelloAndroid.class, __md_methods);

         }

         public HelloAndroid ()

         {

                 super ();

                 if (getClass () == HelloAndroid.class)

                         mono.android.TypeManager.Activate ('Mono.Samples.HelloWorld.HelloAndroid, HelloWorld, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', '', this, new java.lang.Object[] {  });

         }

         @Override

         public void onCreate (android.os.Bundle p0)

         {

                 n_onCreate (p0);

         }

         private native void n_onCreate (android.os.Bundle p0);

}



大家可以看到上面那個(gè) native的n_onCreate方法最后就會(huì)調(diào)用那個(gè)通過mono虛擬機(jī)注冊(cè)的Mono.Samples.HelloWorld.OnCreate 方法。


Managed Callable Wrappers (MCW)


上面我們講Dalvik 虛擬機(jī)是我們C#開發(fā)的Android應(yīng)用程序的宿主,它通過ACW來調(diào)用我們用C#寫的方法。如果我們的這個(gè)C#里面的方法涉及到一些聲音或者系統(tǒng)本身,或者說現(xiàn)在已經(jīng)有很多成熟的用Java寫的類庫,我們想調(diào)用怎么辦? 答案是我們?cè)偻ㄟ^MCW 調(diào)回去。在C#運(yùn)行時(shí)中去調(diào)用Java 稱之為MCW。


Xamarin.Android Framework中有很多就是MCW,關(guān)于MCW的創(chuàng)建以及C#與Java集成開發(fā)的東西我們后面再細(xì)講,包括一個(gè)C#開發(fā)的Android應(yīng)用程序是如何被啟動(dòng)的,我們后面再細(xì)講。對(duì)于C#開發(fā)的Android應(yīng)用程序來說,性能上面肯定是會(huì)有影響,但是影響有多大,我并沒有做過具體測(cè)試,所以就不詳述了。后面我們?cè)偌?xì)細(xì)的去對(duì)比。


Xamarin.IOS 架構(gòu)


對(duì)于開發(fā)者來說,Xamarin.IOS相對(duì)于Xamarin.Android就要簡單很多了,我們用C#開發(fā)的ios應(yīng)用程序在被編譯成IL代碼之后,然后轉(zhuǎn)交給Apple complier直接編譯成IPhonee的本地機(jī)器碼。也就是說C#寫的IPhone應(yīng)用程序和objective-c 寫的是一樣的。并且Xamarin團(tuán)隊(duì)保證在每一個(gè)IOS系統(tǒng)更新的時(shí)間同步更新Xamarin.IOS這樣我們就不用擔(dān)心被滯后了。


小結(jié)


這僅僅是一個(gè)粗略的介紹,Xamarin移動(dòng)跨平臺(tái)方案是如何來工作的,還有太多我們沒有涉及。 Xamarn.Forms為多種移動(dòng)平臺(tái)提供了統(tǒng)一的UI(雖然目前還有些比較特別的沒有實(shí)現(xiàn),官方也沒有力推它,用來做一些原型,或者概念驗(yàn)證可以試一樣,另外如果你的UI確實(shí)很簡單,那倒是沒有問題。),當(dāng)然在Xamarin.Forms不能夠滿足你的要求的時(shí)候,可以使用Xamarin.Android和Xamarin.IOS的UI控件,這些也是Native的,也就是說在UI方面不會(huì)有性能的影響。


就目前來看C#來開發(fā)IOS應(yīng)用更具有優(yōu)越性,我們要在VS中開發(fā)Iphone的應(yīng)用程序需要配一臺(tái)Mac來做編譯。相對(duì)而言,開發(fā)Android的應(yīng)用程序就會(huì)顯得繁瑣一些,底下還有一些隱藏的東西我們沒有具體的講,包括一個(gè)app的創(chuàng)建過程,C#與Java集成在一起開發(fā)時(shí)候的交互等等,這些問題我們就留在后面慢慢來解決。


 參考閱讀


http://developer.xamarin.com/guides/android/under_the_hood/architecture/
http://en.wikipedia.org/wiki/Java_Native_Interface
http://developer.xamarin.com/guides/android/advanced_topics/java_integration_overview/


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Xamarin團(tuán)隊(duì)(原Mono團(tuán)隊(duì))發(fā)布XobotOS源碼,C# 實(shí)現(xiàn)的Android系統(tǒng)
從“黃油”到“苗條” Android的順滑之路
Android 架構(gòu)
Visual Studio 跨平臺(tái)開發(fā)實(shí)戰(zhàn) (1)
為什么你沒有選擇xamarin?
android中面試題匯總
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服