Android - 解决onSaveInstanceState的Bug

解决onSaveInstanceState的Bug

本文地址:http://blog.csdn.net/caroline_wendy

Bug:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
     at android.support.v4.app.FragmentManagerImpl.checkStateLoss(Unknown Source)
     at android.support.v4.app.FragmentManagerImpl.enqueueAction(Unknown Source)
     at android.support.v4.app.BackStackRecord.commitInternal(Unknown Source)
     at android.support.v4.app.BackStackRecord.commit(Unknown Source)
     at android.support.v4.app.FragmentTabHost.onAttachedToWindow(Unknown Source)
     at android.view.View.dispatchAttachedToWindow(View.java:12618)
     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2460)
     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2467)
     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2467)
     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2467)
     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2467)
     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2467)
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1262)
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1045)
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5908)
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:780)
     at android.view.Choreographer.doCallbacks(Choreographer.java:593)
     at android.view.Choreographer.doFrame(Choreographer.java:562)
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:766)
     at android.os.Handler.handleCallback(Handler.java:733)
     at android.os.Handler.dispatchMessage(Handler.java:95)
     at android.os.Looper.loop(Looper.java:136)
     at android.app.ActivityThread.main(ActivityThread.java:5336)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:515)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:681)
     at dalvik.system.NativeStart.main(Native Method)

参考:

http://stackoverflow.com/questions/7575921/illegalstateexception-can-not-perform-this-action-after-onsaveinstancestate-h

http://stackoverflow.com/questions/14278763/call-onsaveinstancestate-without-calling-super-onsaveinstancestateoutstate

解决:

重载onSaveInstanceState()中,不调用super()方法,因为调用super方法,在API level大于11时,可能导致崩溃

@Override
protected void onSaveInstanceState(Bundle outState) {
    //No call for super(). Bug on API Level > 11.
//        super.onSaveInstanceState(outState);
}

onSaveInstanceState()方法的作用: 

onSaveInstanceState的调用遵循原则,即当系统“未经用户许可”时销毁activity,则onSaveInstanceState会被系统调用。

这是系统的责任,因为它必须要提供一个机会让用户保存数据。

super.onSaveInstanceState(outState):

活动本身会在bundle中存入一些值,例如fragments的状态,如果没有调用super方法,这些值不会被保存,但也不会使程序崩溃。

时间: 2024-10-08 14:58:46

Android - 解决onSaveInstanceState的Bug的相关文章

Android 开源SlidingMenu的bug修改

SlidingMenu相信大家都已经很熟悉了 ,源代码托管在 https://github.com/jfeinstein10/SlidingMenu.首先我要感谢下原作者的大无畏精神,因为开源而伟大,哈哈.如果我们的项目中只想用到SlidingMenu,那我们就要把SlidingMenu这个控件给抽离出来了.这个是我抽离出来的的SlidingMenu控件源代码(大家有需要的可以下载学习下).如下: SlidingMenu控件源代码 我也很自豪的将这个开源控件运用在自己公司的项目中了,可是经公司的

CSharp程序员学Android开发---3.Android内部元素不填充BUG

最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历时一个多月,4个人开发,最终行成一个可用的Demo,整体效果还非常不错.这其中借鉴了网上的“仿网易客户端的Demo”还有就是学习<疯狂Android>,收获颇多,这里利用几篇文章做一个项目经验总结,还有就是更多的从C# 程序员的观点来理解Android的一些异同之处. 文章目录: CSharp程序

文《左右c++与java中国的垃圾问题的分析与解决》一bug分析

文<左右c++与java中国的垃圾问题的分析与解决>一bug分析 DionysosLai([email protected]) 2014/10/21 在前几篇一博客<关于c++与java中文乱码问题分析与解决>.地址例如以下:http://blog.csdn.net/dionysos_lai/article/details/38389765.文中具体介绍了c++与java数据传递时.为何会出现中文乱码的原因,并提出了适当的解决方法. 方法例如以下: int CCDirector::

Android 解决Execution failed for task &#39;:app:clean.&#39;报错

说实话,我还真是没见过比Execution failed for task ':app:clean.'更为恶心,更为不要脸的bug啦,代码没啥问题,一下子行让你爽爽,一下子又不鸟你啦,研究了下,终于找到稳定的解决方法. (1)跑到报错的那个build父目录,强制(不管你用的是啥删除软件,360还是其他的,态度一定要强硬)把build文件夹删掉. (2)网上很多都说这时候重启studio即可,当俺发现不管用,就是不管用,那就以管理员身份命令行跑去项目目录中执行一遍gradlew clean即可,这

Grade 编译 Android 解决 Error:more than one library with package name

Grade 编译 Android 解决 Error:more than one library with package name Error: more than one library with package name 'com.app.XX' You can temporarily disable this error with android.enforceUniquePackageName=false However, this is temporary and will be en

Android 解决图片大量下载:软引用必须懂4点

Android 解决图片大量下载:软引用必须懂4点 可能对于Android开发者来说,软引用这个词有的会不是很熟悉,软引用在Java开发中用的比较多,但是,在Android开发中引用软引用,会给我们解决很多难题. AD: 1.对象的强.软.弱和虚引用 为了能更加灵活控制对象的生命周期,需要知道对象引用的4中级别,由高到低依次为 :强引用.软引用.弱引用和虚引用 备注: 这四种的区别: ⑴强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会

Android:解决客户端从服务器上获取数据乱码的方法

向服务器发送HTTP请求,接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity(),"utf-8");解码还是出现了中文乱码,在后面加了 String name = new String(response.getBytes("iso-8859-1"), "UTF-8"); 也无济于事.想到服务器好像是用URLENCODER编了码的,怀着试一试的态度

Android 中onSaveInstanceState和onRestoreInstanceState学习

1. 基本作用: Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate().onPause()等生命周期方法,它们并不一定会被触发.当应用遇到意外情况(如:内存不足.用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用. 但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就

Android 解决手机unauthorized错误

转自:http://blog.csdn.net/quicksand201/article/details/19190821 手机开发者选项中USB调试已经打开,在电脑命令行下输入adb devices,显示手机未认证 D:\develop\androidroot\adt-bundle-windows-x86-20131030\sdk\platform-tools>adb devices* daemon not running. starting it now on port 5037 ** da