android - 当应用程序进入后台并打开 OnBoarding 时出现 NullPointerException
问题描述
我的 Xamarin.Android 应用程序有一个从 MainActivity 开始的 OnBoarding 进程。每次我最小化应用程序并尝试再次启动它时,我都会在输出中显示 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;
}
MainActivity 的 OnCreate 是:
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)。每次我恢复应用程序时,我都会导航到 MainActivity 的 OnCreate 方法,在这里我将再次启动 OnBoarding Activity。
该应用程序没有崩溃,我可以从“最近的应用程序”中看到它。如何找到并修复 NullPointerException 的根本原因?
解决方案
推荐阅读
- javascript - React:Material-UI - 如何设置两个项目列表的样式,以便项目彼此相邻?
- c# - 如何仅使用输入和输出对 TagHelpers 进行单元测试?
- angular - 无法将角度函数传递给菜单项
- sql - Blueprism 不返回数据库结果
- c++ - 防弹 C++ 临时生命周期?
- azure - 通过 Powershell 创建 Azure Monitor 日志搜索警报规则
- sql - 参考 .sql 文件保存在 SSIS 中的 TFS 上
- ios - iOS 13 和 UINavigationBarDelegate::shouldPop()
- c - 非斜边数
- c# - 将 JSON 传递给 C# python 进程