Activity,Fragment状态保存

Activity android:alwaysRetainTaskState     用法html

用来标记Activity所在的Task的状态是否老是由系统来保持——“true”,表示老是;“false”,表示在某种情形下容许系统恢复Task 到它的初始化状态。默认值是“false”。这个特性只针对Task的根Activity有意义;对其它Activity来讲,忽略之。     通常来讲,特定的情形如当用户从主画面从新选择这个Task时,系统会对这个Task进行清理(从stack中删除位于根Activity之上的全部Activivity)。典型的状况,当用户有一段时间没有访问这个Task时也会这么作,例如30分钟。     然而,当这个特性设为“true”时,用户老是能回到这个Task的最新状态,不管他们是如何启动的。这很是有用,例如,像Browser应用程序,这里有不少的状态(例如多个打开的Tab),用户不想丢失这些状态。 Fragment setRetainInstance() 为何会在这儿花必定的篇幅详细说明setRetainInstance()方法呢?由于此方法能够有效地提升系统的运行效率,对流畅性要求较高的应用能够适当采用此方法进行设置。 Fragment有一个很是强大的功能——就是能够在Activity从新建立时能够不彻底销毁Fragment,以便Fragment能够恢复。在onCreate()方法中调用setRetainInstance(true/false)方法是最佳位置。当Fragment恢复时的生命周期如图1-6所示,注意图中的红色箭头。当在onCreate()方法中调用了setRetainInstance(true)后,Fragment恢复时会跳过onCreate()和onDestroy()方法,所以不能在onCreate()中放置一些初始化逻辑,切忌! activity在什么状况下被销毁?     用户按回退键     调用finish     放在回退栈中过久     横竖屏切换 前面两种状况下     系统会认为用户再也不须要这个activity了,因此在销毁时不会作任何事     没有任何浏览方法能倒回去,只能再次启动该app 在第3、四种状况下     用户能够经过回退键或其余方式浏览回去     系统会用bundle保存activity的布局状态包括view状态     而后销毁activity,并在重建activity时恢复之前的状态,无需编程     可是注意,系统销毁前不必定能保存全部用户但愿保存的数据     系统提供onSaveInstanceState()方法给用户保存额外的数据     提供onRestoreInstanceState()方法用于重建时恢复     可是上述方法仅仅保存少许键值对数据,没法保留大量数据     系统提供onRetainNonConfigurationInstance()用于保留大量的数据     提供getLastNonConfigurationInstance()用户恢复数据     注意这个方法不能传递和context有关的东西,好比view、adapter等等,不然会泄露内存     只能保存自定义的MyDataObject     注意这个方法已经 deprecated in API level 13. 官网推荐了下述fragment的方法 activity上面有fragment的状况     官方大力推荐使用fragment来实现模块化,若是activity上面有fragment     那么有一个在销毁重建activity时透传fragment状态的方法 setRetainInstance()     方法解释在 http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)     简单实践了一下,彷佛存在一些问题,可能和activity与fragment的链接和分工有关     彷佛从fragment到activity方向的链接或指针正常     可是从activity到fragment的链接或指针却不对了,activity没法更新fragment     在个人项目的实践结果是          fragment上面的数据,好比listview,本来和下面的activity里面的list是对应的,可是透传以后不对应了     网上找到一些相关讨论。stackoverflow上面相关讨论          http://stackoverflow.com/questions/11160412/why-use-fragmentsetretaininstanceboolean          http://stackoverflow.com/questions/11182180/understanding-fragments-setretaininstanceboolean?lq=1          http://stackoverflow.com/questions/5996446/fragments-setretaininstancetrue-and-threaded-libraries     一篇专门的博客 Handling Configuration Changes with Fragments          http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html 防止activity被销毁重建     横竖屏切换时          横竖屏切换时致使activity销毁和重建          这个动做的目的是担忧activity的布局及资源不适合横竖屏切换          经过销毁重建给程序一个机会来适配          但实际上,若是布局和资源没有和横竖屏绑定的话          其实不必作这个销毁,彻底能够取消这个至关危险的操做          取消方法是在activity的属性中添加 android:configChanges="orientation|screenSize"     放在回退栈中过久          android:alwaysRetainTaskState="true" ----- 始终维持activity的状态          彷佛这个属性可用,但我不很确定          注意文档说明这个方法只对任务栈中第一个activity有效android

相关文章
相关标签/搜索