文档章节

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

丁佳辉
 丁佳辉
发布于 2015/10/20 14:26
字数 379
阅读 1.4K
收藏 2

行业解决方案、产品招募中!想赚钱就来传!>>>

  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/


丁佳辉
粉丝 20
博文 473
码字总数 226084
作品 0
浦东
程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
658
1
Swift百万线程攻破单例(Singleton)模式

一、不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法。单例的实现有多种方法,如下面: class SwiftSingleton { } 这段代码的实现,在shared中进行条...

一叶博客
2014/06/20
3.4K
16
程序猿媛一:Android滑动翻页+区域点击事件

滑动翻页+区域点击事件 ViewPager+GrideView 声明:博文为原创,文章内容为,效果展示,思路阐述,及代码片段。文尾附注源码获取途径。 转载请保留原文出处“http://my.oschina.net/gluoyer...

花佟林雨月
2013/11/09
4.2K
1
集群存储系统--YFS

YFS集群存储系统由多个元数据服务器(MDS)、多个块数据服务器(CDS)和多个客户端(client)互联组成集群; 数据被分成64M固定大小的数据块(Chunk),每个数据块在CDS本地以常规文件的形式...

匿名
2013/02/19
1.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

【重讲拉勾】5 MySQL索引失效

文章内容输出来源:拉勾教育Java高薪训练营 【重讲拉勾】1 JVM内存结构 https://my.oschina.net/u/4033707/blog/4444869 【重讲拉勾】2 Java容器 https://my.oschina.net/u/4033707/blog/44...

不正经的大叔
今天
40
0
每个程序员应阅读的最具影响力的单一书籍是什么? [关闭]

问题: If you could go back in time and tell yourself to read a specific book at the beginning of your career as a developer, which book would it be? 如果你可以回到过去并告诉自己......

技术盛宴
今天
5
0
Spring Cloud系列之微服务介绍

相信我,请认真读完,点开每一个链接,或许你才能真正了解什么是微服务?什么是分布式?什么是云计算?绝对没有多余! 1 微服务 微服务架构是“新常态”。构建小型的、自包含的、随时可以运行...

冯文议
今天
6
0
在Visual Studio中使用Git [关闭] - Using Git with Visual Studio [closed]

问题: As a long-time Visual SourceSafe user (and hater) I was discussing switching to SVN with a colleague; 作为一个长期的Visual SourceSafe用户(和仇恨)我正在讨论与同事转换到S......

富含淀粉
今天
26
0
第三讲:毕业论文(设计)开题报告

本讲讲解开题报告的设计。 一、字体与格式 参看第二讲的内容,这里不再赘述。 二、头部信息 如下图所示,样式不要有太多的差异化。 三、选题的背景与意义 2.1背景 选题背景即阐述做这件事情(...

刘日辉
今天
280
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部