我正在尝试创建Xamarin Forms应用程序以在Android和iOS上运行。该应用程序本身是在首次运行时针对特定客户定制的,因此会下载自定义启动屏幕和其他特定于客户的数据。
我通过添加新的SplashActivity并将其设置为MainLauncher来遵循一些有关在Android中创建启动屏幕的建议。此活动源自“活动”,如下所示:
公共类SplashActivity:活动 { 受保护的重写void OnCreate(捆绑包) { base.OnCreate(bundle);
// Set our view
SetContentView(Resource.Layout.splash);
// Initialise Xamarin Essentials
Xamarin.Essentials.Platform.Init(this, bundle);
Xamarin.Forms.Forms.Init(this, bundle);
// If we have a splash screen already downloaded then we can try and load that here otherwise we use the default image.
try
{
string splashScreen = SharedPreferences.Splash();
if (string.IsNullOrEmpty(splashScreen) || !File.Exists(splashScreen))
{
var iv = FindViewById<ImageView>(Resource.Id.ivSplash);
iv.SetImageResource(Resource.Drawable.splash);
}
else
{
var bitmap = BitmapFactory.DecodeFile(splashScreen);
var bitmapDrawable = new BitmapDrawable(bitmap);
FindViewById<ImageView>(Resource.Id.ivSplash).SetImageDrawable(bitmapDrawable);
}
}
catch (Exception ex)
{
FindViewById<ImageView>(Resource.Id.ivSplash).SetImageResource(Resource.Drawable.splash);
}
// Set a timer to continue
var timer = new Timer(2000) {AutoReset = false};
timer.Elapsed += timer_Elapsed;
timer.Start();
}
当计时器触发时,它将调用原始的MainActivity
public class MainActivity : FormsAppCompatActivityBase
{
protected override void OnCreate(Bundle bundle)
{
LoadApplication(new MainApp());
}
}
我的问题是,当我调用LoadApplication时,应用程序崩溃并出现空引用异常。我已经在MainApp.xaml.cs中设置了断点(因为这在可移植代码中),并且一切似乎都可以正确运行。在添加初始屏幕之前,它可以正常工作,因此我认为是由于这一原因。