問題由來:一般我們拿着手機都是豎屏操作或觀看,但有時會躺着,橫屏去操作,這時,橫豎屏的切換就對Activity的生命週期產生了影響。
一:我們進行橫豎屏切換後,查看log日誌
啓動Activity初始界面爲豎屏顯示
豎屏:
查看log
正常的啓動過程:依次執行 創建 --->onCreate() 可見狀態---> onStart() onResume()
下面 按住Ctrl+F11 切換到橫屏
查看log
可以看出,切換到橫屏後,執行了 不可見--->onPause(),onStop() 銷燬--->onDestroy() 此時豎屏的Activity銷燬結束
然後又重新創建了一遍Activity 依次執行了 創建---->onCreate() 可見----->onStart(),onResume()
二 :產生問題
那麼這兒就會出現一個問題,豎屏切換到橫屏會把豎屏的Activity給銷燬了,此時豎屏Activity的數據銷燬了,而橫屏的Activity又是重新創建的,這樣數據丟失肯定是不行的。
三 解決問題
那怎麼處理這個問題呢?
答:用onSaveInstanceState()回調方法
例如這樣:把你想要傳遞的數據通過這個方法保存起來,這個方法在豎屏Activity暫停後執行。
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putString("name", "zhuminquan");
Log.e("TAG", "MainActivity onSaveInstanceState() method is executed");
}
當豎屏切換到橫屏時,查看log前面我們已經把數據保存到了一個Bundle對象中,那怎麼得到這個數據呢,你可以這樣做
在onCreate(Bundle savedInstanceState)方法添加一句判斷語句,若判斷savedInstanceState不爲空,那麼就把這個數據拿出來。
例如這樣
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview = (TextView)this.findViewById(R.id.textview);
if(savedInstanceState!=null){
String str = savedInstanceState.getString("name");
}
Log.e("TAG", "MainActivity onCreate() method is executed");
}