Android Activity生命週期 onSaveInstanceState和onRestoreInstanceState

來源:互聯網
上載者:User

標籤:android   style   class   ext   color   width   

當某個activity變得“容易”被系統銷毀時,該activity的onSaveInstanceState就會被執行,除非該activity是被使用者主動銷毀的,例如當使用者按BACK鍵的時候。

注意上面的雙引號,何為“容易”?言下之意就是該activity還沒有被銷毀,而僅僅是一種可能性。這種可能性有哪些?通過重寫一個activity的所有生命週期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我們可以清楚地知道當某個activity(假定為activity A)顯示在當前task的最上層時,其onSaveInstanceState方法會在什麼時候被執行,有這麼幾種情況:

1、當使用者按下HOME鍵時。

這是顯而易見的,系統不知道你按下HOME後要運行多少其他的程式,自然也不知道activity A是否會被銷毀,故系統會調用onSaveInstanceState,讓使用者有機會儲存某些非永久性的資料。以下幾種情況的分析都遵循該原則

2、長按HOME鍵,選擇運行其他的程式時。

3、按下電源按鍵(關閉螢幕顯示)時。

4、從activity A中啟動一個新的activity時。

5、螢幕方向切換時,例如從豎屏切換到橫屏時。

在螢幕切換之前,系統會銷毀activity A,在螢幕切換之後系統又會自動地建立activity A,所以onSaveInstanceState一定會被執行

 

總而言之,onSaveInstanceState的調用遵循一個重要原則,即當系統“未經你許可”時銷毀了你的activity,則onSaveInstanceState會被系統調用,這是系統的責任,因為它必須要提供一個機會讓你儲存你的資料(當然你不儲存那就隨便你了)。

 

 

public  void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        outState.putLong("id", 1234567890);    //save }  

 

B 完成以後又會來找A, 這個時候就有兩種情況,一種是A被回收,一種是沒有被回收,被回 收的A就要重新調用onCreate()方法,不同於直接啟動的是這回onCreate()裡是帶上參數 savedInstanceState,沒被收回的就還是onResume就好了。

savedInstanceState是一個Bundle對象,你基本上可以把他理解為系統幫你維護的一個Map對象。在onCreate()裡你可能會用到它,如果正常啟動onCreate就不會有它,所以用的時候要判斷一下是否為空白。

if(savedInstanceState != null){         long id = savedInstanceState.getLong("id");    } 

 

 

activity A時能通過onCreate(Bundle)或者onRestoreInstanceState(Bundle)恢複介面的狀態。 onRestoreInstanceState被調用的前提是,activity A“確實”被系統銷毀了,而如果僅僅是停留在有這種可能性的情況下,則該方法不會被調用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.