说明这篇文章是为了记录自己学习并方便日后查看,不具有学习价值,推荐:
官方文档中告诉了我们为什么要保存Activity的状态:

官方文档中指出可以通过在onSaveInstanceState()中对我们需要保存的状态进行保存
系统会先调用onSaveInstanceState(),然后再使 Activity 变得易于销毁。、
无法保证系统会在销毁您的 Activity 前调用onSaveInstanceState(),因为存在不需要保存状态的情况(例如用户使用“返回”按钮离开您的 Activity 时,因为用户的行为是在显式关闭 Activity)
那么一个问题便是我们保存的状态该如何描述昵?
系统会向该方法传递一个Bundle,您可以在其中使用putString()和putInt()等方法以名称-值对形式保存有关 Activity 状态的信息。然后,如果系统终止您的应用进程,并且用户返回您的 Activity,则系统会重建该 Activity,并将Bundle同时传递给onCreate()和onRestoreInstanceState()。如果没有状态信息需要恢复,则传递给您的Bundle是空值(如果是首次创建该 Activity,就会出现这种情况)。
从上可以看出不要把重要的信息在onSaveInstanceState()中保存,并且最好保存的信息是简短易于保存的UI状态信息
对于一些View小部件,只要为这个View设置了id都可以默认保存一些信息,比如CheckBox的选中状态
为Activity添加片段
添加片段有两种方式:
1.利用<fragment>元素定义
2.使用FragmentManager在运行时动态添加(*)
如果我们的Activity允许我们移除和替换片段,应在Activity中的onCreate()添加初始片段
在处理片段时Activity布局里应该存在一个可以插入片段的容器,例如FrameLayout
所以在官方文档的代码中为了保证这个容器的存在首先应该检查这个容器的存在:
```
if(findViewById(R.id.fragment_container)!=null){...}
```
如果我们的Activity是从前一状态加载进来这样我们就不需要再为这个Activity添加Fragment
(一直有一个疑问 如果在Activity重新加载的时候不应该在onStart中吗,如果重新加载一个已经被kill的ac不就相当于重新使用这个AC吗 我需要把AC的周期搞明白再过来填坑。。。)
```
// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else// we could end up with overlapping fragments.
if(savedInstanceState!=null){return;}
```
在您的 Activity 内,使用 Support Library API 调用getSupportFragmentManager()以获取FragmentManager。然后,调用beginTransaction()创建一个FragmentTransaction,并调用add()添加一个片段。
您可以使用同一FragmentTransaction为 Activity 执行多片段事务。做好更改准备时,您必须调用commit()。

执行替换或移除片段等片段事务时,通常最好让用户能够回退并“撤消”更改。 要让用户回退所执行的片段事务,您必须先调用addToBackStack(),然后再提交FragmentTransaction:

addToBackStack()方法使用的可选字符串参数会为事务指定一个唯一的名称。除非您计划使用FragmentManager.BackStackEntryAPI 执行高级片段操作,否则并不需要该名称。(这一部分还没涉及)
网友评论