Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android開發入門(七)處理變化 7.2 保存狀態等信息

Android開發入門(七)處理變化 7.2 保存狀態等信息

編輯:Android開發教程

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

onPause() —— 當一個activity被kill掉或被轉入後台的時候,這個方法總是被調用。

onSaveInstanceState() —— 當一個activity將被kill掉或轉入後台的時候,這個方法也會被掉用,就 像onPause()方法一樣。但是,當一個activity從調用棧中清除的時候(例如按返回鍵的時候),這個方法不 會被調用(注:onPause()方法會被調用),因為已經沒有必要保存它的狀態了。

簡而言之,想要保存activity的狀態,那麼總是要實現onPause()方法,然後使用你自己的方法去保存狀 態信息,例如使用數據庫,外部或內部的存儲。

如果你想簡單地保存狀態信息,當activity在重新創 建的時候,從新加載這些信息。一個簡單的方法就是實現onSaveInstanceState()這個方法,因為它提供了一 個Bundle對象作為參數,這樣,就可以使用這個Bundle對象去保存activity的信息。下面的代碼將展示如何 使用onSaveInstanceState()方法:

@Override  
public void onSaveInstanceState(Bundle outState) {      
    //---save whatever you need to persist---      
    outState.putString("ID", "1234567890");      
    super.onSaveInstanceState(outState);      
}

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

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

盡管可以使用onSavaInstanceState()方法去保存狀態信息,但這也有限制:只能通過Bundle對象 去保存你的信息。如果你想保存更多的、更復雜的數據結構,這種方法就顯得不太合適了。

可以使用 的另外一種方法是使用onRetainNonConfigurationInstance()回調方法。當一個activity因為配置更改(例 如屏幕方向的改變)而獎杯銷毀的時候,Android系統將調用這個方法。可以這麼使用:

@Override 

  
public Object onRetainNonConfigurationInstance() {      
    //---save whatever you want here; it takes in an Object type---      
    return("Some text to preserve");      
}

把你想保存的東西,通過這個方法返回出來。

可以觀察到,這個方法返回一個Object對象 ,這就允許你返回任何數據類型。如果要提取保存的數據,可以在onCreate()方法中進行提取,使用 getLastNonConfigurationInstance()回調方法:

public void onCreate(Bundle 

savedInstanceState) {      
        super.onCreate(savedInstanceState);      
        setContentView(R.layout.main);      
           
        Log.d("StateInfo", "onCreate");      
        String str = (String) getLastNonConfigurationInstance();      
           
    }

onRetainNonConfigurationInstance()和getLastNonConfigurationInstance(),這兩個方法 可以允許你隨時地保存信息。

例如,當用戶下載數據的同時改變了屏幕方法,使用這兩個方法去保存數據 ,總好過重新下載數據吧。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved