ActivityA调用ActivityB,报错:Can not perform this action after onSaveInstanceState

82 阅读1分钟

最近再开发中碰到了一个问题: 当我在自己的应用A中调起另一个应用B的摄像头进行扫码时,因为再ActivityA中设置了超时时间,所以在一段时间B未拿到扫码数据,则会报超时错误,进而退回到应用A。 问题描述: 但是在超时之后,我却没有如预期退到应用A的初始界面,反而应用崩溃了。 后面经过搜索资料和咨询。我发现是his.mStateSaved为true,就会抛出这个异常。而对于mStateSaved用了保存Fragment状态,是Activity#onSaveInstanceState时通过调用FragmentManager#saveAllState方法,来进行Fragment的状态保存,同时设置mStateSaved为true,用来标识状态已被保存过。 所以我们可以利用反射机制修改mStateSaved的值,在出现问题的popStack()前,从而避免程序崩溃。

Field field = null; try { field = getSupportFragmentManager().getClass().getDeclaredField("mStateSaved"); field.setAccessible(true); field.set(getSupportFragmentManager(), false); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); }

图片.png

在这里谢谢为我解决问题的大佬!共勉。