В приложении Xamarin.Android есть процесс OnBoarding, который начинается с MainActivity. Каждый раз, когда я минимизирую приложение и пытаюсь запустить его снова, в выводе отображается NullPointerException, и я не могу найти основную причину.
10-30 13:52:59.102 W/System.err(23618): java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getVisibility()' on a null object reference
10-30 13:52:59.102 W/System.err(23618): at android.view.ViewRootImpl.getHostVisibility(ViewRootImpl.java:1809)
10-30 13:52:59.102 W/System.err(23618): at android.view.ViewRootImpl.handleAppVisibility(ViewRootImpl.java:1445)
10-30 13:52:59.102 W/System.err(23618): at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:4841)
10-30 13:52:59.102 W/System.err(23618): at android.os.Handler.dispatchMessage(Handler.java:106)
10-30 13:52:59.103 W/System.err(23618): at android.os.Looper.loop(Looper.java:214)
10-30 13:52:59.103 W/System.err(23618): at android.app.ActivityThread.main(ActivityThread.java:7078)
10-30 13:52:59.103 W/System.err(23618): at java.lang.reflect.Method.invoke(Native Method)
10-30 13:52:59.103 W/System.err(23618): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
10-30 13:52:59.103 W/System.err(23618): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
10-30 13:53:01.421 W/ActivityThread(23618): handleWindowVisibility: no activity for token android.os.BinderProxy@177ac90
10-30 13:53:01.473 I/DecorView(23618): createDecorCaptionView >> DecorView@a2ae0c1[], isFloating: false, isApplication: true, hasWindowDecorCaption: false, hasWindowControllerCallback: true
OnBoarding создается с использованием класса AppIntro и вызывается изMainActivity, как это:
private bool CanOpenOnBoarding()
{
var getPrefs = PreferenceManager.GetDefaultSharedPreferences(BaseContext);
bool isFirstStart = getPrefs.GetBoolean(AppDetails.ShowOnboarding, true);
if (isFirstStart)
{
StartActivity(new Intent(this, typeof(OnBoarding)));
Finish();
return true;
}
return false;
}
OnCreate MainActivity:
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
MainViewModel.PropertyChanged += OnProprietyChanged;
Presenter = (CustomPresenter) Mvx.IoCProvider.Resolve<IMvxAndroidViewPresenter>();
Presenter.RegisterFragmentManager(FragmentManager);
var appService = Mvx.IoCProvider.Resolve<IApplicationService>();
appService.InitializeDbAsync().ConfigureAwait(false).GetAwaiter().GetResult();
MainViewModel.CheckForConnectivityAsync();
if (CanOpenOnBoarding())
{
return;
}
TabHost = FindViewById<TabHost>(global::Android.Resource.Id.TabHost);
TabHost.TabWidget.SetDividerDrawable(null);
TabHost.Setup();
//leave them without Await
MainViewModel.DisplayTermsAndConditionsModalAsync();
}
Другие жизненные циклы не затронуты (OnResume, OnPause). Каждый раз, когда я возобновляю приложение, я перехожу к методу OnCreate MainActivity, где я снова запускаю OnBoarding Activity.
Приложение не падает, как я вижу из недавних приложений. Как я могу найти и исправить основную причину исключения NullPointerException?