是什么导致android.support.v4.app.Fragment.setUserVisibleHint()崩溃?

时间:2020-01-22 11:22:28

标签: android android-fragments android-appcompat androidx

自最近以来,我在我的应用程序的crashlytics中看到了以下崩溃的几种情况:

Fragment.java第960行 android.support.v4.app.Fragment.setUserVisibleHint

Fatal Exception: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.RecyclerView$SavedState
       at android.os.Parcel.readParcelableCreator + 2855(Parcel.java:2855)
       at android.os.Parcel.readParcelable + 2781(Parcel.java:2781)
       at android.os.Parcel.readValue + 2684(Parcel.java:2684)
       at android.os.Parcel.readSparseArrayInternal + 3134(Parcel.java:3134)
       at android.os.Parcel.readSparseArray + 2367(Parcel.java:2367)
       at android.os.Parcel.readValue + 2741(Parcel.java:2741)
       at android.os.Parcel.readArrayMapInternal + 3053(Parcel.java:3053)
       at android.os.BaseBundle.initializeFromParcelLocked + 288(BaseBundle.java:288)
       at android.os.BaseBundle.unparcel + 232(BaseBundle.java:232)
       at android.os.BaseBundle.putBoolean + 569(BaseBundle.java:569)
       at android.support.v4.app.Fragment.setUserVisibleHint + 960(Fragment.java:960)
       at android.support.v4.app.FragmentStatePagerAdapter.instantiateItem + 121(FragmentStatePagerAdapter.java:121)
       at android.support.v4.view.ViewPager.addNewItem + 1004(ViewPager.java:1004)
       at android.support.v4.view.ViewPager.populate + 1186(ViewPager.java:1186)
       at android.support.v4.view.ViewPager.populate + 1086(ViewPager.java:1086)
       at android.support.v4.view.ViewPager$3.run + 267(ViewPager.java:267)
       at android.view.Choreographer$CallbackRecord.run + 986(Choreographer.java:986)
       at android.view.Choreographer.doCallbacks + 764(Choreographer.java:764)
       at android.view.Choreographer.doFrame + 696(Choreographer.java:696)
       at android.view.Choreographer$FrameDisplayEventReceiver.run + 965(Choreographer.java:965)
       at android.os.Handler.handleCallback + 873(Handler.java:873)
       at android.os.Handler.dispatchMessage + 99(Handler.java:99)
       at android.os.Looper.loop + 214(Looper.java:214)
       at android.app.ActivityThread.main + 7073(ActivityThread.java:7073)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 494(RuntimeInit.java:494)
       at com.android.internal.os.ZygoteInit.main + 965(ZygoteInit.java:965)

我无法重现崩溃。

有人知道是什么原因吗?

1 个答案:

答案 0 :(得分:0)

显然,崩溃是由一种支持兼容库'com.android.support:appcompat-v7:28.0.0''com.android.support:support-compat:28.0.0'中的错误引起的

迁移到AndroidX可以解决问题。

使用Android Studio 3.2及更高版本,您可以迁移现有的 通过选择“重构”>“从以下位置迁移到AndroidX”将项目迁移到AndroidX 菜单栏。

有关信息:

AndroidX将原始支持库API替换为中的软件包 androidx名称空间。仅包和Maven工件名称 改变类,方法和字段名称保持不变。

AndroidX是经过重新设计的库,用于使程序包名称更清晰。所以 从现在开始,Android层次结构将仅适用于android默认 类,这是android操作系统附带的 库/依赖关系将成为androidx的一部分(更合理)。所以 从现在开始,所有新的开发都将在androidx中进行更新。

Google不再支持原始支持库:

版本28.0.0是支持库的最新版本。