我在Crashlytics上看到以下错误,发生率很高:
Caused by java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to android.widget.CompoundButton$SavedState
at android.widget.CompoundButton.onRestoreInstanceState(CompoundButton.java)
at android.view.View.dispatchRestoreInstanceState(View.java)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java)
at android.view.View.restoreHierarchyState(View.java)
at android.support.v4.app.Fragment.restoreViewState(Fragment.java:494)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1486)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2466)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1483)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3269)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:620)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java)
at android.app.Activity.performStart(Activity.java)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
at android.app.ActivityThread.access$900(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
at android.os.Handler.dispatchMessage(Handler.java)
at android.os.Looper.loop(Looper.java)
at android.app.ActivityThread.main(ActivityThread.java)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
但是,由于在平台级别引发了异常,因此此堆栈跟踪对我的代码库没有任何帮助。
从我读到的内容来看,这可能与重复的ID有关,但是我在代码中找不到任何有关如何调试此ID的想法?
我还尝试在开发人员选项上启用“不保留活动”以强制实例还原,但是我无法手动重现崩溃。
答案 0 :(得分:2)
在不查看代码和确切的活动/片段类的情况下,很难找到确切的问题,但是可能有以下原因可以帮助您进行更多调试。
在转换时,您可能具有重复的ID名称或“查看哪些匹配项并造成内存泄漏”。
可能CompoundButton
的导入错误,可能是因为您使用的是自定义视图或版本影响。
答案 1 :(得分:0)
这可能是由与包含布局的名称相同的resId
视图引起的。(主要原因)。
它也可能是由重复resId
的视图引起的,但这不太可能是原因。
查看建议的所有片段XML(很难分辨是哪个原因引起的)。
但是Edit
> Find
> Find in Path
...使查找事件变得容易;
在另一个布局后面搜索一个布局名称;然后搜索视图的resId
。
答案 2 :(得分:0)
好吧,事实证明我正在使用新的Chip组件(扩展CompoundButton),并且有一组带有没有ID的芯片。
这会导致该应用在旧版手机(Android 6)上崩溃,因为同一ID被分配给我只能猜测的多个芯片。
我卸下了该芯片(无论如何也没有必要),它也不再崩溃。
答案 3 :(得分:0)
就我而言,我从所有包含的布局中删除了滚动视图。