編輯:關於Android編程
目前為止,我們已經了解到了,當改變屏幕方向的時候,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(),這兩個方法可以允許你隨時地保存信息。
例如,當用戶下載數據的同時改變了屏幕方法,使用這兩個方法去保存數據,總好過重新下載數據吧。
先看看效果圖:停在中間自動翻頁序言:最近接到一個任務,做一個類似上面自動翻頁的功能。可以看到,這一屏中有三張圖片顯示出來了,有兩張沒有顯示完全,看到設計圖的時候第一反應是
使用Eclipse開發Android已經有些年頭了,然而Android Studio(後面簡稱AS)為谷歌自己推的IDE。現在AS已經出了2.0版本,其功能的確要比Ecl
本文實例講述了Android編程實現調用系統分享功能。分享給大家供大家參考,具體如下:/** * 調用系統的分享功能 * Created by admin on 15-4
Android中UI特效 android經典開源代碼分享 本文原始網址 作者為23code,歡迎給作者投稿 其它UI相關的網址: https://github.co