利用onSaveInstanceState()方法保存Activity狀態

  Activity裏的onSaveInstanceState()方法,雖然系統會自動調用它來保存Activity的一些數據,但當除它默認要保存的數據外,咱們還要保存一些其餘數據的時候, 咱們就須要覆蓋onSaveInstanceState()方法來保存Activity的附件信息。例如在播放視頻過程當中,橫豎屏切換要保持當前播放時間進度,在默認狀況下播放時間是不被自動保存的。html

寫了一個簡單的播放視頻的例子,在橫豎屏切換時保持當前播放進度,效果圖:java

橫屏切換:android

mian.xml的代碼:app

[html] view plaincopyide

  1. <?xml version="1.0" encoding="utf-8"?>  svn

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  this

  3.     android:orientation="vertical" android:layout_width="fill_parent"  google

  4.     android:layout_height="fill_parent">  spa

  5.      

  6.     <VideoView android:id="@+id/myvideo"   android:layout_width="wrap_content"  .net

  7.               android:layout_height="wrap_content" />  

  8. </LinearLayout>  

MainAcrtivity主要代碼部分:

[java] view plaincopy

  1. private VideoView videoView;  

  2. private static final String VIDEO_PATH = Environment  

  3.         .getExternalStorageDirectory()  

  4.         + File.separator  

  5.         + "mymovie"  

  6.         + File.separator + "shenghuaweiji.mp4";  

  7.   

  8. /** Called when the activity is first created. */  

  9. @Override  

  10. public void onCreate(Bundle savedInstanceState) {  

  11.     super.onCreate(savedInstanceState);  

  12.     setContentView(R.layout.main);  

  13.     Log.v("tag""onCreate");  

  14.      

  15.     if (videoView == null) {  

  16.         videoView = (VideoView) this.findViewById(R.id.myvideo);  

  17.         MediaController controller = new MediaController(this);  

  18.         videoView.setMediaController(controller);  

  19.         videoView.setVideoPath(VIDEO_PATH);  

  20.         videoView.requestFocus();  

  21.     }  

  22.   

  23.     if (savedInstanceState != null  

  24.             && savedInstanceState.getInt("currentposition") != 0) {  

  25.   

  26.         videoView.seekTo(savedInstanceState.getInt("currentposition"));  

  27.     }  

  28.     videoView.start();  

  29.   

  30. }  

onCreate方法中的參數savedInstanceState就是保存的Activity一些狀態。

[java] view plaincopy

  1. savedInstanceState.getInt("currentposition")  

獲取視頻播放時間。

實現並覆蓋了onSaveInstanceState方法:

[java] view plaincopy

  1. @Override  

  2. protected void onSaveInstanceState(Bundle outState) {  

  3.     // TODO Auto-generated method stub  

  4.     outState.putInt("currentposition", videoView.getCurrentPosition());  

  5.     Log.v("tag""onSaveInstanceState");  

  6.     super.onSaveInstanceState(outState);  

  7. }   

紅色代碼是將當前video的播放時間存儲在Bundle中。

這樣在橫豎屏切換時保證了播放狀態,源代碼:http://bigcateasymorse.googlecode.com/svn/trunk/save-activity-state1.0/

相關文章
相關標籤/搜索