我有一个第三方模块,它是一个Xamarin java绑定库,带有一些C#类,使它可以在Xamarin.Android中运行。如果我创建一个简单的Xamarin.Android项目,我可以完美地使用它。但我想在我的大型跨平台Xamarin项目中实现它,该项目使用的是MvvmCross框架 此第三方模块需要将自己的应用程序类设置为Android应用程序的基类。通常,如果您创建和应用程序类,则将Android.App.Application设置为基类并使用ApplicationAttribute进行装饰。
[Application]
public class MyApp: Android.App.Application
{}
但是如果我将基类设置为模块的XYZApplication类,这只是在java中:
public class XYZApplication extends Application{}
当加载第一个视图时,MvvmCross框架失败并显示此消息:
System.NullReferenceException:
Object reference not set to an instance of an object
at Android.App.SyncContext.Post (System.Threading.SendOrPostCallback d, System.Object state) [0x00014] in
/Users/builder/data/lanes/monodroid-mlion-monodroid-4.12-series/a1e3982a/source/monodroid/src/Mono.Android/src/Android.App/SyncContext.cs:17
at Cirrious.MvvmCross.Droid.Views.MvxAndroidMainThreadDispatcher.RequestMainThreadAction (System.Action action) [0x00025]
MvxAndroidMainThreadDispatcher.RequestMainThreadAction
中失败的行:
Android.App.Application.SynchronizationContext.Post(ignored => ExceptionMaskedAction(action), null);
我查了一下,ExceptionMaskedAction(action)
自行执行,问题出在Android.App.SyncronizationContext
上。
我还发现,更改基类Android.App.Application.Context
后变为空(但奇怪的是Mvx.Resolve<IMvxAndroidGlobals>().ApplicationContext
仍能正确保存上下文)。这可能与上面的问题有关,SyncronyzationContext
也有问题,也许Xamarin没有正确初始化它,或者如果我改变基类,我应该手工完成。
我希望有人知道我做错了什么,或者我应该如何为Xamarin.Android使用不同的应用程序基类,以使一切正常工作。