来自Xamarin.Android中的java绑定库的应用程序基类使Context为null,并且MvvmCross失败

时间:2014-04-07 12:57:16

标签: c# xamarin.android mvvmcross

我有一个第三方模块,它是一个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使用不同的应用程序基类,以使一切正常工作。

0 个答案:

没有答案