利用onSaveInstanceState()方法保存Activity状态

      Activity里的onSaveInstanceState()方法,虽然系统会自动调用它来保存Activity的一些数据,但当除它默认要保存的数据外,我们还要保存一些其他数据的时候, 我们就需要覆盖onSaveInstanceState()方法来保存Activity的附件信息。例如在播放视频过程中,横竖屏切换要保持当前播放时间进度,在默认情况下播放时间是不被自动保存的。

写了一个简单的播放视频的例子,在横竖屏切换时保持当前播放进度,效果图:

横屏切换:

mian.xml的代码:

[html] view plaincopy
  1. xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical" android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent">  
  5.      
  6.     <VideoView android:id="@+id/myvideo"   android:layout_width="wrap_content"  
  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/


你可能感兴趣的:(Android)