http://blog.csdn.net/leewind841209/article/details/6561874
[Target]
在Activity里的onCreate(Bundle savedInstanceState)函数中,savedInstanceState这个参数是用来存储Activity的信息,包括了每个UI的信息和用户自定义在其中存储的信息。这篇文章就目的就是讨论关于Activity的自身信息的存储。
[Investigation]
Activity下的函数onSaveInstanceState(Bundle outState),是用来做具体内容的存储。如果不复写的话,这个函数的作用就是调用每个View的onSaveInstanceState去存储UI里面的信息,什么文字、颜色、focus的状态等等。如果复写的话,Programmer可以在这里定义一些需要存储的信息,放到Bundle,调用Bundle里面什么putInt之类的函数。
但是这个函数的难点在于它什么时候被调用,这个不是用简单的生命周期来分析定义的,而其中涉及到了一些逻辑判断。
有篇翻译过来的文章值得推荐: http://blog.csdn.net/ddna/archive/2010/01/03/5123482.aspx
这个函数的执行,我总结下来有这样几点需要注意的
- 如果onSaveInstanceState被调用,是在onResume到onPause之间被调用的
- 使用了finish来关闭Activity不会调用onSaveInstanceState,也就是说这个Activity不可能被再现
- 如果使用了startActivity跳转Activity,onSaveInstanceState也不会被调用,因为原来的Activity并没有被销毁,只是保存到了stack中去了。只要这些UI信息不被破坏,那么onSaveInstanceState是不会被调用的
- 如果orientation发生了变化,同时没有规定Activity在orientation变化的时候不重启,那么Activity会调用onDestory销毁当前的Activity,但是同时onSaveInstanceState也会被调用,这样在变化之后,原有的画面信息仍然被保留了下来
- 如果使用中点击了Home键,onSaveInstanceState不会被调用,因为Activity没有被销魂,只是放到了stack中去了,跟startActivity的情况一样。
我知道我说的可能跟很多其他人转帖的内容不一样,我只想说这些都是我从实际使用中和阅读了Google文档进行分析的来的,欢迎指正。
说完了onSaveInstanceState的调用情况,来说一下返回情况,一般在onSaveInstanceState存储的值,可以在两个地方得到:
- onCreate(Bundle savedInstanceState)
- onRestoreInstanceState(Bundle savedInstanceState)
onCreate这个函数,我们继承它的时候,经常不会说把super这行代码去掉,因为前面它有很多代码都是包含了如何用savedInstanceState信息来还原界面的。
onRestoreInstanceState这个函数的调用是在onStart到onResume之间执行的。
为什么要有两个来调用?我觉得这跟Activity保存和还原的方式有关。举个例子来说,如果我们调用了startActivity从Activity A跳转到了Activity B,那么Activity A只调用到了onStop,它本身并没有被消除,只是存到了stack中去了。当你在Activity B中点了Back键,回到Activity A中来,这个时候Activity A是从onStart开始调用的。所以很明显,onCreate这里,我们没有经过,不能在这里读到保存的信息,但是有了onRestoreInstanceState,我们又可以做到了。
[Fect]
说说onSaveInstanceState的缺点,我们可以看到,只有在onCreate和onRestoreInstanceState这样非常不灵活,而且只能用Bundle这个也限制了我们的代码编写。所以Android还提供了一个API:onRetainNonConfigurationInstance。这个下次讨论
[Example]
最后老样子放一个例子:
- public class SecondActivity extends Activity{
- private static final String TAG = "Michael";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- if (savedInstanceState!=null) {
- Log.i(TAG, "data is "+savedInstanceState.getInt("save"));
- }
- setContentView(R.layout.main);
- }
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- // TODO Auto-generated method stub
- super.onSaveInstanceState(outState);
- outState.putInt("save", 11);
- Log.i(TAG, "onSaveInstanceState, data is "+outState.getInt("save"));
- }
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onRestoreInstanceState(savedInstanceState);
- Log.i(TAG, "onrestore, data is "+savedInstanceState.getInt("save"));
- }
- }
相关推荐
Android 中的 onSaveInstanceState 和 onRestoreInstanceState 是两个重要的生命周期方法,它们在 Activity 的生命周期中扮演着关键角色。了解这两个方法的触发时机对于开发者来说是非常重要的。 首先,我们需要...
然后,当活动被重新创建(如屏幕旋转后),Android会调用`onCreate`或`onRestoreInstanceState`,在这里你可以从`savedInstanceState`参数中恢复之前保存的状态: ```java @Override protected void onCreate...
当Activity被系统销毁(如屏幕旋转)时,可以使用`onSaveInstanceState(Bundle)`保存当前状态,然后在`onCreate(Bundle)`或`onRestoreInstanceState(Bundle)`中恢复。 在"ActivityDemo"项目中,开发者通常会创建一...
- onCreate():Activity首次创建时调用,用于初始化界面布局和基本组件。 - onStart():Activity变得可见但不一定是前台活动时调用。 - onResume():Activity完全可见并与用户交互时调用。 2. 运行过程: - ...
为了确保Activity在停止和重启后能正确恢复,开发者应使用`onSaveInstanceState()`保存关键数据,并在`onCreate()`或`onRestoreInstanceState()`中恢复。 7. 状态管理最佳实践 理解并妥善处理Activity的生命周期是...
开发者可以通过重写`onSaveInstanceState()`保存状态,并在`onCreate()`或`onRestoreInstanceState()`恢复。 8. **后台任务和Intent**: 在Activity的生命周期中,Intent常用来启动其他Activity或Service。通过`...
4. **保存和恢复状态**:在onSaveInstanceState()和onRestoreInstanceState()方法中保存和恢复Activity的状态,以确保应用在配置改变时能正确恢复。 总之,理解Activity的生命周期和如何有效地管理它是开发Android...
6. **onSaveInstanceState()**:在系统将要销毁Activity前调用,用于保存Activity的当前状态,以便在重新创建Activity时恢复。通常用于保存临时数据或视图状态。 7. **onDestroy()**:当Activity被销毁前调用,这是...
Android 生命周期管理:重置一个 Activity Android 生命周期管理是 Android...通过 onSaveInstanceState() 和 onRestoreInstanceState() 回调函数,可以保存和恢复 Activity 的状态信息,避免数据丢失和恢复状态信息。
- **onSaveInstanceState()** 和 **onRestoreInstanceState()**:用于在Activity重建时保存和恢复用户界面的状态。 了解并正确使用这些回调是Android开发者的基本功。在实际开发中,我们经常需要根据业务需求在回调...
2. `onCreate(Bundle savedInstanceState)` 和 `onRestoreInstanceState(Bundle savedInstanceState)`: 在Activity创建时,如果之前保存了状态,系统会调用`onCreate()`方法,并传递保存的Bundle。开发者可以在`...
在实际开发中,尤其要注意处理配置变更(如屏幕旋转)导致的Activity重建,以及在onSaveInstanceState(Bundle outState)和onRestoreInstanceState(Bundle savedInstanceState)中保存和恢复状态。同时,合理使用静态...
当用户返回,`onRestart()`->`onStart()`->`onResume()`会被调用,若Activity被销毁并重新创建,`onCreate()`会再次调用,接着是`onStart()`和`onResume()`。 理解并熟练掌握Activity生命周期对于开发高效、响应式...
为了保存Activity的状态,开发者可以使用onSaveInstanceState Bundle参数来存储关键数据,然后在onCreate或onRestoreInstanceState中恢复这些数据。 Intent是Android中的一个关键类,它用来表示一个动作、动作的...
为避免数据丢失,可在`onSaveInstanceState(Bundle outState)`中保存关键数据,并在`onCreate(Bundle savedInstanceState)`或`onRestoreInstanceState(Bundle savedInstanceState)`中恢复。 8. **Task和Back Stack*...
在onSaveInstanceState()中保存数据,然后在onCreate()或onRestoreInstanceState()中恢复。 总结一下,Activity之间的相互调用与传递参数是Android开发中的核心技能。理解启动模式、Intent的使用、回调机制以及生命...
6. 理解和利用生命周期回调函数:Activity生命周期涉及多个回调函数,如onCreate(), onRestoreInstanceState(), 和onSaveInstanceState()。这些方法分别在Activity创建、恢复状态和保存状态时被系统调用。正确地实现...
为了在Activity状态改变时保存用户数据,Android提供了onSaveInstanceState(Bundle outState)和onRestoreInstanceState(Bundle savedInstanceState)方法。在系统准备销毁Activity时,会调用onSaveInstanceState(),...