在我的应用中,我有一个带有按钮的片段,要求用户使用本地Android AccountPicker选择帐户。
这是我的方法:
Intent intent = AccountPicker.newChooseAccountIntent(null, null,
new String[] {"com.google", "com.google.android.legacyimap"},
false, null, null, null, null);
startActivityForResult(intent, PICK_ACCOUNT);
问题是,如果在AccountPicker对话框仍显示时用户在整个应用程序背景下运行,则Fragment会分离并重新开始其生命周期,但是AccountPicker对话框仍然存在。
结果是,黑色背景顶部有一个AccountPicker对话框,继续进行AccountPicker不会执行任何操作。解散后,将重新创建该片段,因此用户必须再次通过AccountPicker。
我在片段的onCreate()中使用
setRetainInstance(true)
我的问题是:
发现了问题,改变了我最初的问题。所以这是怎么回事。我的片段正在使用AccountPicker来使用户帐户继续运行,没有选择的帐户,我的应用程序无法继续运行(我没有选择默认帐户)。当整个应用程序在后台运行且AccountPicker仍在运行时,我的主活动将终止其生命周期,并在此途中也将Fragment分离。但是,AccountPicker是堆栈顶部的一个单独的Activity,因此它不会被破坏,只是恢复。
我强迫我的Activity不能破坏自己,并且onStop()中的Fragment会被破坏,但是onSavedInstance()会在onStop()之前自动调用,并且我的Activity状态会被保存。这意味着我以后不能再发布Fragment事务,因为它将导致“ Lost State”错误。
因此,新问题是:如果我必须等待onActivtyResult()提交Fragment事务,是否可以避免在onStop()之前保存Activity状态?