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
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接