博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用onSaveInstanceState()方法保存Activity状态
阅读量:6571 次
发布时间:2019-06-24

本文共 1916 字,大约阅读时间需要 6 分钟。

hot3.png

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

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

横屏切换:

mian.xml的代码:

[html] 

  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] 

  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] 

  1. savedInstanceState.getInt("currentposition")  

获取视频播放时间。

实现并覆盖了onSaveInstanceState方法:

[java] 

  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中。

这样在横竖屏切换时保证了播放状态,源代码:

转载于:https://my.oschina.net/u/1177694/blog/519341

你可能感兴趣的文章
Intellij IDEA 2018.2 搭建Spring Boot 应用
查看>>
SNMP AGENT函数介绍
查看>>
Git提交到多个远程仓库(多看两个文档)
查看>>
期末大作业
查看>>
[Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
查看>>
极客学院职业路径图课程视频下载-爬虫
查看>>
slice,substr和substring的区别
查看>>
课堂练习(续)
查看>>
对于数据库连接池的一些思考和MyBatis的集成与使用
查看>>
[TJOI2013]最长上升子序列
查看>>
「译」当你独自开发时,你可以这么做
查看>>
Android基础夯实--重温动画(三)之初识Property Animation
查看>>
LNMP架构下的进程模型分析
查看>>
你是什么时候走上产品之路的?
查看>>
TensorFlow Lite for Android 初探(附demo)
查看>>
Android:这是一份全面 & 详细的图片加载库Glide源码分析
查看>>
ie9以下兼容html5方法
查看>>
理性分析 JavaScript 中的原型
查看>>
spring security oauth2 client_credentials模式
查看>>
Android 开发中不得不知道的 Tips 集合 (第二波)(持续更新 ing)
查看>>