Xamarin — моно- и Android-коммуникация

#android #xamarin #mono #xamarin.android

#Android #xamarin #моно #xamarin.android

Вопрос:

Я просматривал документацию по Xamarin https://developer.xamarin.com/guides/android/under_the_hood/architecture / и в нем говорится

«Xamarin.Приложения Android выполняются в среде выполнения Mono. Эта среда выполнения выполняется параллельно с виртуальной машиной Android Runtime (ART). Обе среды выполнения выполняются поверх ядра Linux и предоставляют различные API для пользовательского кода, что позволяет разработчикам получать доступ к базовой системе «

Насколько я понимаю, приложение представляет собой единый процесс — что значит сказать, что существует две среды выполнения? Похоже ли, что эти две среды запускаются в разных потоках в одном и том же процессе? Или это похоже на загрузку среды выполнения Android, а затем запуск Mono runtime?

Ответ №1:

Вам просто нужно было прочитать дальше, чтобы запустить приложение. Среда выполнения загружается во время создания процесса:

Xamarin.Android подключается к этому, добавляя mono.MonoRuntimeProvider ContentProvider к AndroidManifest.xml во время процесса сборки. Метод mono.MonoRuntimeProvider.attachInfo() отвечает за загрузку среды выполнения Mono в процесс. Любые попытки использовать Mono до этого момента завершатся неудачей. (Примечание: вот почему типы, которые относятся к подклассу Android.App.Application, должны предоставлять конструктор (IntPtr, JniHandleOwnership), поскольку экземпляр приложения создается до инициализации Mono.)

Упомянутая часть AndroidManifest.xml выглядит так:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="foo.sample" android:installLocation="auto" 
          android:versionCode="1" android:versionName="1.0">
  <application ...>

    <provider android:name="mono.MonoRuntimeProvider" 
              android:exported="false" android:initOrder="2147483647" 
              android:authorities="foo.sample.mono.MonoRuntimeProvider.__mono_init__" />

  </application>
</manifest>
  

Комментарии:

1. Я могу только поддержать это. Это не объясняет мой актуальный вопрос: «Насколько я понимаю, приложение представляет собой единый процесс — что значит сказать, что существует две среды выполнения?»