關於Activity的橫豎屏切換引起的生命週期變化的問題

問題由來:一般我們拿着手機都是豎屏操作或觀看,但有時會躺着,橫屏去操作,這時,橫豎屏的切換就對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");
    }




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章