NullPointerException, когда приложение уходит в фоновом режиме с открытой OnBoarding - PullRequest
0 голосов
/ 30 октября 2019

В приложении 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?

...