java.lang.IllegalStateException异常
Line 151151: 06-14 19:15:46.601 1804 1804 E Media: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState Line 151152: 06-14 19:15:46.601 1804 1804 E Media: at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1877) Line 151153: 06-14 19:15:46.601 1804 1804 E Media: at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1900) Line 151154: 06-14 19:15:46.601 1804 1804 E Media: at android.app.BackStackRecord.commitInternal(BackStackRecord.java:688) Line 151155: 06-14 19:15:46.601 1804 1804 E Media: at android.app.BackStackRecord.commit(BackStackRecord.java:646) Line 151156: 06-14 19:15:46.601 1804 1804 E Media: at com.la.media.view.BTCoordinator.detach(BTCoordinator.java:61) Line 151157: 06-14 19:15:46.601 1804 1804 E Media: at com.la.media.coordinator.Binding.onViewDetachedFromWindow(Binding.java:63) Line 151158: 06-14 19:15:46.601 1804 1804 E Media: at android.view.View.dispatchDetachedFromWindow(View.java:18488) Line 151159: 06-14 19:15:46.601 1804 1804 E Media: at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3836) Line 151160: 06-14 19:15:46.601 1804 1804 E Media: at android.view.ViewGroup.removeAllViewsInLayout(ViewGroup.java:5636) Line 151161: 06-14 19:15:46.601 1804 1804 E Media: at android.view.ViewGroup.removeAllViews(ViewGroup.java:5582) Line 151162: 06-14 19:15:46.601 1804 1804 E Media: at com.la.media.MainActivity.refresh(MainActivity.java:351) Line 151163: 06-14 19:15:46.601 1804 1804 E Media: at com.la.media.MainActivity.access$300(MainActivity.java:38) Line 151164: 06-14 19:15:46.601 1804 1804 E Media: at com.la.media.MainActivity$2.run(MainActivity.java:335) Line 151165: 06-14 19:15:46.601 1804 1804 E Media: at android.os.Handler.handleCallback(Handler.java:873) Line 151166: 06-14 19:15:46.601 1804 1804 E Media: at android.os.Handler.dispatchMessage(Handler.java:99) Line 151167: 06-14 19:15:46.601 1804 1804 E Media: at android.os.Looper.loop(Looper.java:193) Line 151168: 06-14 19:15:46.601 1804 1804 E Media: at android.app.ActivityThread.main(ActivityThread.java:6702) Line 151169: 06-14 19:15:46.601 1804 1804 E Media: at java.lang.reflect.Method.invoke(Native Method) Line 151170: 06-14 19:15:46.601 1804 1804 E Media: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) Line 151171: 06-14 19:15:46.601 1804 1804 E Media: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:994)
异常原因
看上面打印的日志就是在Activity销毁时调用FragmentTransition的commit方法添加Fragment抛出的异常。 查阅Android文档的说明
public abstract int commitAllowingStateLoss () Like commit() but allows the commit to be executed after an activity's state is saved. This is dangerous because the commit can be lost if the activity needs to later be restored from its state, so this should only be used for cases where it is okay for the UI state to change unexpectedly on the user.
嗯嗯,为什么我们会有这种报错呢?
因为我们在使用add(),remove(),replace()等方法将Fragment的变化添加进去,然后在通过commit去提交这些变化(另外,在commit之前可以去调用addToBackState()方法,将这些变化加入到activity管理的back stack中去,这样用户调用返回键就可以回退这些变化了),提交完成之后这些变化就会应用到我们的Fragment中去。
但是如果在Activity销毁时(也就是已经在调用onSaveInstanceState()了,这时已经在保存数据了。)再commit()就会跟保存的数据有冲突,异常会抛出异常来。
解决方法
使用commitAllowingStateLoss()替代commit()即可。
参考文章
- 《java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState问题解决》
- 《Android官方文档commitAllowingStateLoss》
- 《解决IllegalStateException: Can not perform this action after onSaveInstanceState》
- 《源码分析commitAllowingStateLoss() 和commit()的区别》
历史上的今天
暂无评论...
随机推荐
戴望舒:致萤火
萤火,萤火,你来照我。 照我,照这沾露的草,照这泥土,照到你老。 我躺在这里,让一颗芽穿过我的躯体,我的心,长成树,开花; 让一片青色的藓苔,那么轻,那么轻把我全身遮盖, 象一双小手纤纤,当往日我在昼眠,把一条薄被在我身上轻披...
简单记录AIDL添加回调
前言之前也记录过AIDL的使用,今天简单写AIDL添加回调代码。记录一下,方便自己查阅。流水账,勿喷!正文为了简单一点,放在同一个应用中,然后把服务设置到新的进程中。AIDL文件设置回调,这里会创建两个AIDL文件。ICar.aidl// ICar.aidlpackage ...
毕淑敏:幸福是可以传染给别人的
01我曾看过一则新闻:英国有家报社,向社会有奖征答“谁是最幸福的人”,然后排出第一种最幸福的人,是一个妈妈给孩子洗完澡,怀抱着婴儿;第二种最幸福的人,是一个医生治好了病人并目送他远去;第三种最幸福的人,是一个孩子在海滩上筑起了沙堡;备选答案是,一个作家写完了著作的最后一个字,放下笔的那一瞬间。看...
Android应用被杀的日志分析记录
前言最近Android项目中出现一个问题,应用开机源记忆拉起,突然被强制性退了(看Activity的生命周期),搞得我一时懵逼了。日志有这几个打印BufferQueueConsumer( 419): [Splash Screen com.la.media#0](this:0x7ccbe90...
许立志:我咽下一枚铁做的月亮
我咽下一枚铁做的月亮他们把它叫做螺丝 我咽下这工业的废水,失业的订单那些低于机台的青春早早夭亡 我咽下奔波,咽下流离失所咽下人行天桥,咽下长满水锈的生活 我再咽不下了所有我曾经咽下的现在都从喉咙汹涌而出在祖国的领土上铺成一首耻辱的诗
铁凝:一千张糖纸
小学一年级的暑假里,我去北京外婆家做客。正是“七岁八岁讨人嫌”的年龄,外婆的四合院里到处都有我的笑闹声。加之隔壁院子一个名叫世香的女孩子跑来和我做朋友,我们两人的种种游戏更使外婆家不得安宁了。我们在院子里跳皮筋,把青砖地跺得砰砰响;我们在枣树下的方桌上玩“抓子儿”,“羊拐”撒在桌面上一阵又一阵哗啦...