WEB开发网
开发学院手机开发Android 开发 Android开发之InstanceState详解 阅读

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);  
.        }  
.   }

上一页  1 2 3 4  下一页

Tags:Android 开发 InstanceState

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接