編輯: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(),這兩個方法 可以允許你隨時地保存信息。
例如,當用戶下載數據的同時改變了屏幕方法,使用這兩個方法去保存數據 ,總好過重新下載數據吧。
 
一、Service簡介Service是android 系統中的四大組件之一(Activity、Service、BroadcastReceiver、 ContentProv
除了fragments(碎片),在Android3和4中新增加的特性,還有ActionBar(活動欄)。ActionBar位於傳 統標題欄的位置,就在設備屏幕的頂部。Ac
如果想要添加OpenCV的依賴庫, 則需要把OpenCV的"D:\OpenCV-2.4.9-android-sdk\sdk\java"文件夾復制到An
我們已經了解了如何在自己的單個應用中調用activity。但是,android開發中比較重要的一點,就是使 用intent調用其他應用的activity。特別地,你的應用