Android开发之InstanceState详解
2012-03-28 09:33:20 来源:WEB开发网核心提示: 如果需要保存额外的数据时, 就需要覆写onSaveInstanceState()方法,onSaveInstanceState()方法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等,Android开发之InstanceState详解(3), (见下例), 由于onSaveInstanceState()方法
如果需要保存额外的数据时, 就需要覆写onSaveInstanceState()方法。onSaveInstanceState()方法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等。 (见下例)。
由于onSaveInstanceState()方法方法不一定会被调用, 因此不适合在该方法中保存持久化数据, 例如向数据库中插入记录等. 保存持久化数据的操作应该放在onPause()中。若是永久性值,则在onPause()中保存;若大量,则另开线程吧,别阻塞UI线程。
6. 引发activity摧毁和重建的其它情形
除了系统处于内存不足的原因会摧毁activity之外, 某些系统设置的改变也会导致activity的摧毁和重建. 例如改变屏幕方向(见上例), 改变设备语言设定, 键盘弹出等。
另外,当屏幕的方向发生了改变, Activity会被摧毁并且被重新创建,如果你想在Activity被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。可以重写Activity的 onSaveInstanceState() 和 onRestoreInstanceState()方法,如下:
7. 代码示例如下所示:
. public class MainActivity extends Activity { 2. public static final int SECOND_ACTIVITY =0;
. private String temp;
.
. @Override
. public void onCreate(<span style="color:#ff6666;">BundlesavedInstanceState</span>) {
. super.onCreate(savedInstanceState);
. // 从savedInstanceState中恢复数据, 如果没有数据需要恢复savedInstanceState为null
. if (<span style="color:#ff6666;">savedInstanceState</span> != null) {
. temp =savedInstanceState.getString("temp");
. System.out.println("onCreate:temp = " + temp);
. }
. }
.
. public void onResume() {
. super.onResume();
. temp = "xing";
. System.out.println("onResume:temp = " + temp);
. // 切换屏幕方向会导致activity的摧毁和重建
. if (getRequestedOrientation() ==ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {
. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
. System.out.println("屏幕切换");
. }
. }
.
. // 将数据保存到outState对象中, 该对象会在重建activity时传递给onCreate方法
. @Override
. protected void <span style="color:#ff0000;">onSaveInstanceState</span>(BundleoutState) {
. super.onSaveInstanceState(outState);
. outState.putString("temp",temp);
. }
. }
Tags:Android 开发 InstanceState
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接
