Android 程式開發:(七)處理變化 —— 7.2 儲存狀態等資訊

來源:互聯網
上載者:User

目前為止,我們已經瞭解到了,當改變螢幕方向的時候,activity將會被銷毀,隨後被重建。請記住一點,當activity被重建之後,它的當前資訊可能消失。當一個activity被kill掉,將會調以下方法中的一個或著兩個:

onPause() —— 當一個activity被kill掉或被轉入背景時候,這個方法總是被調用。
onSaveInstanceState() —— 當一個activity將被kill掉或轉入背景時候,這個方法也會被掉用,就像onPause()方法一樣。但是,當一個activity從調用棧中清除的時候(例如按返回鍵的時候),這個方法不會被調用(註:onPause()方法會被調用),因為已經沒有必要儲存它的狀態了。
簡而言之,想要儲存activity的狀態,那麼總是要實現onPause()方法,然後使用你自己的方法去儲存狀態資訊,例如使用資料庫,外部或內部的儲存。
如果你想簡單地儲存狀態資訊,當activity在重新建立的時候,從新載入這些資訊。一個簡單的方法就是實現onSaveInstanceState()這個方法,因為它提供了一個Bundle對象作為參數,這樣,就可以使用這個Bundle對象去儲存activity的資訊。下面的代碼將展示如何使用onSaveInstanceState()方法:
[java] 
@Override  
public void onSaveInstanceState(Bundle outState) { 
    //---save whatever you need to persist--- 
    outState.putString("ID", "1234567890"); 
    super.onSaveInstanceState(outState); 

當一個activity被重建,onCreate()方法會首先被調用,然後是onRestoreInstanceState()方法,就是這個方法能夠取回剛剛通過onSaveInstanceState()方法儲存的資訊:

[java] 
@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    //---retrieve the information persisted earlier--- 
    String ID = savedInstanceState.getString("ID"); 

儘管可以使用onSavaInstanceState()方法去儲存狀態資訊,但這也有限制:只能通過Bundle對象去儲存你的資訊。如果你想儲存更多的、更複雜的資料結構,這種方法就顯得不太合適了。
可以使用的另外一種方法是使用onRetainNonConfigurationInstance()回調方法。當一個activity因為配置更改(例如螢幕方向的改變)而獎盃銷毀的時候,Android系統將調用這個方法。可以這麼使用:
[java] 
@Override   
public Object onRetainNonConfigurationInstance() { 
    //---save whatever you want here; it takes in an Object type--- 
    return("Some text to preserve"); 

把你想儲存的東西,通過這個方法返回出來。
可以觀察到,這個方法返回一個Object對象,這就允許你返回任何資料類型。如果要提取儲存的資料,可以在onCreate()方法中進行提取,使用getLastNonConfigurationInstance()回調方法:
[java]
public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
 
        Log.d("StateInfo", "onCreate"); www.2cto.com
        String str = (String) getLastNonConfigurationInstance(); 
 
    } 
onRetainNonConfigurationInstance()和getLastNonConfigurationInstance(),這兩個方法可以允許你隨時地儲存資訊。
例如,當使用者下載資料的同時改變了螢幕方法,使用這兩個方法去儲存資料,總好過重新下載資料吧。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.