Activity,Fragment状态保存

Activity android:alwaysRetainTaskState     用法

用来标记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 在第三、四种情况下     用户可以通过回退键或其他方式浏览回去     系统会用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有效

时间: 2024-12-29 01:44:42

Activity,Fragment状态保存的相关文章

Android基础部分再学习---activity的状态保存

主要是bundle   这个參数 參考地址:http://blog.csdn.net/lonelyroamer/article/details/18715975 学习Activity的生命周期,我们知道,当Activity进入到paused或者stopped状态后,这个Activity的状态仍然保存着. 由于这个Activity对象仍然保存在内存中.它的全部信息和状态仍然是存在的.当这个Activity再次返回到前台是,它仍然保持着离开时候的样子. 然而.假设Activity进入到了后台.系统为

Activity具体解释(生命周期、以各种方式启动Activity、状态保存,全然退出等)

一.什么是Activity? 简单的说:Activity就是布满整个窗体或者悬浮于其它窗体上的交互界面.在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Activity,例如以下设置 <actionandroid:name="android.intent.action.MAIN" /> 当程序第一次执行时用户就会看这个Activity,这个Activity能够通过启动其它的Activity进行相关操作.当启动其它的Activity

Fragment状态保存

这篇博文是对官方API Demo的FragmentRetainInstanceSupport.java的学习,路径在android-sdk-macosx/extras/android/support/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentRetainInstanceSupport.java 一般情况下,activity的状态发生改变(转屏),fragment也同样经历也会跟着一起发生状态改变(des

Activity详细解释(生命周期、以各种方式启动Activity、状态保存,等完全退出)

一.什么是Activity? 简单的说:Activity或者悬浮于其它窗体上的交互界面. 在一个应用程序中通常由多个Activity构成.都会在Manifest.xml中指定一个主的Activity,例如以下设置 <actionandroid:name="android.intent.action.MAIN" /> 当程序第一次执行时用户就会看这个Activity,这个Activity能够通过启动其它的Activity进行相关操作.当启动其它的Activity时这个当前的这

Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复

Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状态之外, 还需要用户手动保存一些成员变量. Fragment的状态有它自己的实例状态和其中的View状态, 因为其生命周期的灵活性和实际需要的不同, 情况会多一些. 根据源码, 列出了Fragment中实例状态和View状态保存和恢复的几个入口, 便于分析查看. 最后专门讲了WebView状态保存和

Android View状态保存

说到状态保存,就不得不提到Activity的onSaveInstanceState()方法,这个是大家经常用到的一个函数,就是当我们的Activity被置为后台,当我们再次进入这个Activity的时候,这个Activity需要被恢复,并且回调这个方法. 下面来看看这个方法 private static final String WINDOW_HIERARCHY_TAG = "android:viewHierarchyState"; protected void onSaveInsta

Android -- TabHost、Fragment、状态保存、通信

工程结构                                                                                       TabAFm到TabEFm都是Fragment,并且每个Fragment对应一个布局文件. TabAFm.java                                                                             package com.yydcdut.tabho

slidingmenu+fragment实现常用的侧滑效果(包括Fragment状态的保存)

一.需求 关于fragment的问题,一直想写一篇博客了,应该当初自己也是对这玩意一点都不熟悉到现在也大概知道个日常的使用的地步. 一个侧滑的导航栏,内有4个条目,每个选项点击进入对应的界面,每一个界面是一个fragment,各界面之间自由切换,且可以保存之前的状态,也就是说,切换的过程并不会产生新的对象,不会重新去new 一个fragment对象,不需要每次点击重新加载数据,这里就涉及了一个很重要的问题,fragment状态的保存,在这篇文章里,我尽量用实例把这个问题说清楚,毕竟当初也是查了不

Android中保存和恢复Fragment状态的最好方法

英文原文:Probably be the best way (?) to save/restore Android Fragment's state so far 关键点:Fragment的Arguments. 经过这几年使用Fragment之后,我想说,Fragment的确是一种充满智慧的设计,但是使用Fragment时有太多需要我们逐一解决的问题,尤其是在处理数据保持的时候. 首先,虽然其有类似于activity的onSaveInstanceState,但是别想仅仅靠onSaveInstan