最近重新看了下android开发文档,在Activity生命周期这边看到了onSaveInstanceState和onRestoreInstanceState两个函数
文档说 在系统出于自己的原因而不是软件用户行为时,会调用onSaveInstanceState保存当前view的信息,然后调用create时参数saveIInstanceState会被传入参数(此时不为空,而平时create 参数为null)且onResstoreInstanceState会被调用。
在竖屏和行屏切换的时候,EditeText里的文字仍然被保存者,说明系统自身处理了页面信息保存和恢复功能,无需开发者实现。在log里 我看到了onRestoreInstanceState在onStart之后被调用了,且create里的参数也非空。但onSaveInstanceState没有被调用,网上有的说会被调用。
目前来看,我认为onSaveInstanceState和OnRestoreInstanceState主要时给系统自身使用的,用来在某些特殊情况下,保存和恢复一些view信息。至于用户其他需要额外保存的信息,如果确实需要的话我认为还是放在onPause或者onStop中,恢复可以放在onResuse或者onstart中,这些函数是各种情况下肯定会被调用的。这样操作会更加保险点。
至于是什么原因导致我在旋转时没有出现调要onSaveInstanceState函数,但实际上view参数得到恢复,我持暂停态度,待后续深入时再详究。-->补充下:我的开发sdk里面 onSaveInstanceState的参数是(Bundle outState,PersistableBudle outPersistentState)这个跟之前大家遇到的只有一个参数不同,网上有个也是用的此参数说是5.0以后新添加的,需要在AndroidMainfest.xml中对应activity中添加android:persistableMode="persistAcrossReboots",且在5.0以上版本测试。
我的测试手机是4.2的所以不能看到调用onSaveInstanceState。在安装Genymotion 6.0虚拟机后终于看到了onSaveInstatnceState被调用.