Activity裏的onSaveInstanceState()方法,雖然系統會自動調用它來保存Activity的一些數據,但當除它默認要保存的數據外,咱們還要保存一些其餘數據的時候, 咱們就須要覆蓋onSaveInstanceState()方法來保存Activity的附件信息。例如在播放視頻過程當中,橫豎屏切換要保持當前播放時間進度,在默認狀況下播放時間是不被自動保存的。html
寫了一個簡單的播放視頻的例子,在橫豎屏切換時保持當前播放進度,效果圖:java
橫屏切換:android
mian.xml的代碼:app
[html] view plaincopyide
<?xml version="1.0" encoding="utf-8"?> svn
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" this
android:orientation="vertical" android:layout_width="fill_parent" google
android:layout_height="fill_parent"> spa
<VideoView android:id="@+id/myvideo" android:layout_width="wrap_content" .net
android:layout_height="wrap_content" />
</LinearLayout>
MainAcrtivity主要代碼部分:
[java] view plaincopy
private VideoView videoView;
private static final String VIDEO_PATH = Environment
.getExternalStorageDirectory()
+ File.separator
+ "mymovie"
+ File.separator + "shenghuaweiji.mp4";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.v("tag", "onCreate");
if (videoView == null) {
videoView = (VideoView) this.findViewById(R.id.myvideo);
MediaController controller = new MediaController(this);
videoView.setMediaController(controller);
videoView.setVideoPath(VIDEO_PATH);
videoView.requestFocus();
}
if (savedInstanceState != null
&& savedInstanceState.getInt("currentposition") != 0) {
videoView.seekTo(savedInstanceState.getInt("currentposition"));
}
videoView.start();
}
onCreate方法中的參數savedInstanceState就是保存的Activity一些狀態。
[java] view plaincopy
savedInstanceState.getInt("currentposition")
獲取視頻播放時間。
實現並覆蓋了onSaveInstanceState方法:
[java] view plaincopy
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putInt("currentposition", videoView.getCurrentPosition());
Log.v("tag", "onSaveInstanceState");
super.onSaveInstanceState(outState);
}
紅色代碼是將當前video的播放時間存儲在Bundle中。
這樣在橫豎屏切換時保證了播放狀態,源代碼:http://bigcateasymorse.googlecode.com/svn/trunk/save-activity-state1.0/