致命异常:java.lang.IllegalStateException:保存状态失败:活动片段已从 FragmentManager 中删除
Fatal Exception: java.lang.IllegalStateException: Failure saving state: active fragment was removed from the FragmentManager
我最近将我的应用更改为 API 级别 28,并且还开始使用 androidx 而不是支持库。更改后,我注意到崩溃具有以下回溯
Fatal Exception: java.lang.IllegalStateException: Failure saving state: active MyFragment{22caf6fc (04a7bbf5-8806-4a45-a25d-616ed244bf18) id=0x7f1000ff} was removed from the FragmentManager
at androidx.fragment.app.FragmentManagerImpl.saveAllState(FragmentManagerImpl.java:2301)
at androidx.fragment.app.FragmentController.saveAllState(FragmentController.java:150)
at androidx.fragment.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:496)
at androidx.appcompat.app.AppCompatActivity.onSaveInstanceState(AppCompatActivity.java:510)
at com.company.utils.MyAppCompatActivity.onSaveInstanceState(MyAppCompatActivity.java:161)
at android.app.Activity.performSaveInstanceState(Activity.java:1311)
at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1288)
at android.app.ActivityThread.callCallActivityOnSaveInstanceState(ActivityThread.java:4166)
at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3577)
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3633)
at android.app.ActivityThread.access00(ActivityThread.java:164)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1491)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:160)
at android.app.ActivityThread.main(ActivityThread.java:5541)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
我所有的活动都是从 activity MyAppCompatActivity
扩展而来的,而 MyAppCompatActivity
从 AppCompatActivity
扩展而来。在 MyAppCompatActivity
的 onSaveInstanceState
方法中,我有几行日志。我在 activity 中使用 FragmentStatePageAdapter
在 ViewPager 下实现了三个片段,并且 activity 本身并没有覆盖 onSaveInstanceState
方法。
我浏览了一些与此接近的 SO 帖子,例如 this one and this one, but it looks as if it's happening when we're using FragmentManager
's methods to manage the fragments ourselves rather than using a ViewPagerAdapter handle it. I'm not doing that and the closest thing that I'm doing away from the usual flow is overriding FragmentStatePageAdapter
's methods instantiateItem
and destroyItem
to help me have a method to get a fragment's reference in the code as given in this SO answer。
您使用的是哪个片段库版本?有an issue with 1.1.0-alpha01.
我正在使用最新的gradle如下
implementation 'androidx.core:core:1.1.0-alpha03'
我将崩溃片段与其他片段代码进行了比较,发现差异如下:
崩溃片段在 onCreateView() 中有方法 setRetainInstance(true);,如下面的片段所示。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setRetainInstance(true);
}
我遇到 link 说不要使用 setRetainInstance : setRetainInstance - This can only be used with fragments not in the back stack
我删除了导致 fragmnet 崩溃的 setRetainInstance(true);它现在正在工作。
如何重现此问题:
MainActivity --> HomeFragment --> FirstFragment(崩溃片段)--> HomeFragment
MainActivity 加载 HomeFragment,HomeFragment 替换为 FirstFragment,然后返回到 HomeFragment。
然后将我的应用程序移至后台并发生崩溃,但出现以下异常。
java.lang.IllegalStateException: Failure saving state: active
FirstFragment{fd50037 (4a8b618e-a0a8-45d0-aa37-ba08393b8f68)
id=0x7f08009c} was removed from the FragmentManager
我没有任何setRetainInstance(true);
当我浏览我的代码时,我看到我正在使用 onResume 中的片段管理器对同一片段进行另一笔交易。
这个问题有时是由于双击完成当前 activity 的按钮引起的。
添加:
button.setEnable="false";
对于您视图中的所有按钮 ;)
享受
在 build.gradle 应用中添加依赖项
implementation 'androidx.preference:preference:1.1.0-alpha05'
它对我有用,多亏了
Refer this - https://issuetracker.google.com/issues/119256498
我的问题出现在 运行 时间,我在相机打开几秒钟后授予相机和存储权限,我的应用程序崩溃了。我用这个我的问题解决了
我最近将我的应用更改为 API 级别 28,并且还开始使用 androidx 而不是支持库。更改后,我注意到崩溃具有以下回溯
Fatal Exception: java.lang.IllegalStateException: Failure saving state: active MyFragment{22caf6fc (04a7bbf5-8806-4a45-a25d-616ed244bf18) id=0x7f1000ff} was removed from the FragmentManager
at androidx.fragment.app.FragmentManagerImpl.saveAllState(FragmentManagerImpl.java:2301)
at androidx.fragment.app.FragmentController.saveAllState(FragmentController.java:150)
at androidx.fragment.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:496)
at androidx.appcompat.app.AppCompatActivity.onSaveInstanceState(AppCompatActivity.java:510)
at com.company.utils.MyAppCompatActivity.onSaveInstanceState(MyAppCompatActivity.java:161)
at android.app.Activity.performSaveInstanceState(Activity.java:1311)
at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1288)
at android.app.ActivityThread.callCallActivityOnSaveInstanceState(ActivityThread.java:4166)
at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3577)
at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3633)
at android.app.ActivityThread.access00(ActivityThread.java:164)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1491)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:160)
at android.app.ActivityThread.main(ActivityThread.java:5541)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
我所有的活动都是从 activity MyAppCompatActivity
扩展而来的,而 MyAppCompatActivity
从 AppCompatActivity
扩展而来。在 MyAppCompatActivity
的 onSaveInstanceState
方法中,我有几行日志。我在 activity 中使用 FragmentStatePageAdapter
在 ViewPager 下实现了三个片段,并且 activity 本身并没有覆盖 onSaveInstanceState
方法。
我浏览了一些与此接近的 SO 帖子,例如 this one and this one, but it looks as if it's happening when we're using FragmentManager
's methods to manage the fragments ourselves rather than using a ViewPagerAdapter handle it. I'm not doing that and the closest thing that I'm doing away from the usual flow is overriding FragmentStatePageAdapter
's methods instantiateItem
and destroyItem
to help me have a method to get a fragment's reference in the code as given in this SO answer。
您使用的是哪个片段库版本?有an issue with 1.1.0-alpha01.
我正在使用最新的gradle如下
implementation 'androidx.core:core:1.1.0-alpha03'
我将崩溃片段与其他片段代码进行了比较,发现差异如下: 崩溃片段在 onCreateView() 中有方法 setRetainInstance(true);,如下面的片段所示。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setRetainInstance(true);
}
我遇到 link 说不要使用 setRetainInstance : setRetainInstance - This can only be used with fragments not in the back stack
我删除了导致 fragmnet 崩溃的 setRetainInstance(true);它现在正在工作。
如何重现此问题: MainActivity --> HomeFragment --> FirstFragment(崩溃片段)--> HomeFragment
MainActivity 加载 HomeFragment,HomeFragment 替换为 FirstFragment,然后返回到 HomeFragment。 然后将我的应用程序移至后台并发生崩溃,但出现以下异常。
java.lang.IllegalStateException: Failure saving state: active
FirstFragment{fd50037 (4a8b618e-a0a8-45d0-aa37-ba08393b8f68)
id=0x7f08009c} was removed from the FragmentManager
我没有任何setRetainInstance(true); 当我浏览我的代码时,我看到我正在使用 onResume 中的片段管理器对同一片段进行另一笔交易。
这个问题有时是由于双击完成当前 activity 的按钮引起的。
添加:
button.setEnable="false";
对于您视图中的所有按钮 ;)
享受
在 build.gradle 应用中添加依赖项
implementation 'androidx.preference:preference:1.1.0-alpha05'
它对我有用,多亏了
Refer this - https://issuetracker.google.com/issues/119256498
我的问题出现在 运行 时间,我在相机打开几秒钟后授予相机和存储权限,我的应用程序崩溃了。我用这个我的问题解决了