onSaveinstancestate 保存和恢复activity的状态数据
2012-08-31 22:27
519 查看
一般来说, 调用onPause()和onStop()方法后的activity实例仍然存在于内存中, activity的所有信息和状态数据不会消失, 当activity重新回到前台之后, 所有的改变都会得到保留.
但是当系统内存不足时, 调用onPause()和onStop()方法后的activity可能会被系统摧毁, 此时内存中就不会存有该activity的实例对象了. 如果之后这个activity重新回到前台, 之前所作的改变就会消失. 为了避免此种情况的发生, 开发者可以覆写onSaveInstanceState()方法. onSaveInstanceState()方法接受一个Bundle类型的参数, 开发者可以将状态数据存储到这个Bundle对象中, 这样即使activity被系统摧毁, 当用户重新启动这个activity而调用它的onCreate()方法时, 上述的Bundle对象会作为实参传递给onCreate()方法, 开发者可以从Bundle对象中取出保存的数据, 然后利用这些数据将activity恢复到被摧毁之前的状态.
需要注意的是, onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的. 比如用户按下BACK键退出activity时, 用户显然想要关闭这个activity, 此时是没有必要保存数据以供下次恢复的, 也就是onSaveInstanceState()方法不会被调用. 如果调用onSaveInstanceState()方法, 调用将发生在onPause()或onStop()方法之前.
但是当系统内存不足时, 调用onPause()和onStop()方法后的activity可能会被系统摧毁, 此时内存中就不会存有该activity的实例对象了. 如果之后这个activity重新回到前台, 之前所作的改变就会消失. 为了避免此种情况的发生, 开发者可以覆写onSaveInstanceState()方法. onSaveInstanceState()方法接受一个Bundle类型的参数, 开发者可以将状态数据存储到这个Bundle对象中, 这样即使activity被系统摧毁, 当用户重新启动这个activity而调用它的onCreate()方法时, 上述的Bundle对象会作为实参传递给onCreate()方法, 开发者可以从Bundle对象中取出保存的数据, 然后利用这些数据将activity恢复到被摧毁之前的状态.
<SPAN style="FONT-SIZE: small">public class MainActivity extends Activity { public static final int SECOND_ACTIVITY = 0; private String temp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 从savedInstanceState中恢复数据, 如果没有数据需要恢复savedInstanceState为null if (savedInstanceState != null) { temp = savedInstanceState.getString("temp"); System.out.println("onCreate: temp = " + temp); } } // 将数据保存到outState对象中, 该对象会在重建activity时传递给onCreate方法 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("temp", temp); } }</SPAN>
需要注意的是, onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的. 比如用户按下BACK键退出activity时, 用户显然想要关闭这个activity, 此时是没有必要保存数据以供下次恢复的, 也就是onSaveInstanceState()方法不会被调用. 如果调用onSaveInstanceState()方法, 调用将发生在onPause()或onStop()方法之前.
相关文章推荐
- 【转】android笔记--保存和恢复activity的状态数据
- android笔记--保存和恢复activity的状态数据
- 保存和恢复activity的状态数据
- android保存和恢复activity的状态数据
- Android 保存和恢复activity的状态数据
- Android处理运行时变更保存数据状态恢复Activity
- android笔记--保存和恢复activity的状态数据
- 保存和恢复activity的状态数据
- Android 保存和恢复activity的状态数据
- android笔记--保存和恢复activity的状态数据
- 【转】android笔记--保存和恢复activity的状态数据
- android笔记--保存和恢复activity的状态数据
- android笔记--保存和恢复activity的状态数据
- Android开发之保存和恢复Activity的状态与数据
- android -保存和恢复activity的状态数据
- android笔记--保存和恢复activity的状态数据
- Android保存和恢复activity状态数据
- android笔记--保存和恢复activity的状态数据
- activity的数据状态保存:自己的一点经验
- 安卓性能优化之Activity和Fragment通过onSaveInstanceState()保存和恢复数据