Android 在onResume之前的片段事务期间,防止IllegalStateException的最佳方法是什么
在我的项目中,我只使用一个活动,所有的屏幕都是由片段实现的。我的Android 在onResume之前的片段事务期间,防止IllegalStateException的最佳方法是什么,android,android-fragments,Android,Android Fragments,在我的项目中,我只使用一个活动,所有的屏幕都是由片段实现的。我的活动只控制片段导航、权限处理、显示警报对话等。 我经常遇到这种情况。问题是,在上述所有情况下,如请求许可、显示警报等,活动和片段将转到onPause,如果在此操作之后立即转到另一个屏幕,这意味着如果执行片段事务,则立即执行,活动仍将处于onPause状态,并将导致崩溃。我必须等到活动进入恢复状态。 一个用例是,在启动屏幕中,我请求权限。在询问权限后,如果允许,我必须启动主屏幕,这是另一个片段。因此,在权限回调后要执行的下一个代码是一
活动
只控制片段
导航、权限处理、显示警报对话等。
我经常遇到这种情况。问题是,在上述所有情况下,如请求许可、显示警报等,活动
和片段
将转到onPause
,如果在此操作之后立即转到另一个屏幕,这意味着如果执行片段事务
,则立即执行,活动
仍将处于onPause
状态,并将导致崩溃。我必须等到活动
进入恢复
状态。
一个用例是,在启动屏幕中,我请求权限。在询问权限后,如果允许,我必须启动主屏幕,这是另一个片段。因此,在权限回调后要执行的下一个代码是一个片段事务,由于在活动
上出现了请求权限的对话框
,活动需要一些时间才能返回到恢复
,因此我必须等待一段时间来执行片段事务
当发生onActivityResult
时,情况也是如此。
目前我正在做一个快速修复。我将一个runnable作为活动中的成员,它是片段事务runnable。我将尝试捕获一个非法状态异常
,在捕获
中,我将片段事务分配给Runnable。每次在活动onResume
中,如果Runnable不是null,我只是在执行它。
对ActivityResult的也进行了相同的修复。我将把结果保存在一个成员中,并在活动的onResume
中传递给片段。
但我认为这不是一个好的做法。代码看起来也很难看,因为在活动中使用了这么多成员来处理此错误。
有什么好方法可以解决这个问题吗?您可以通过提交状态丢失的片段事务来解决这个问题
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_holder, new Fragment())
.commitAllowingStateLoss()
但是,如果您想保留片段的状态,则在调用onSaveInstanceState
后不应执行片段事务。请发布一些代码