利用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. <VideoView android:id="@+id/myvideo"   android:layout_width="wrap_content"
  6. android:layout_height="wrap_content" />
  7. </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. /** Called when the activity is first created. */
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.main);
  12. Log.v("tag", "onCreate");
  13. if (videoView == null) {
  14. videoView = (VideoView) this.findViewById(R.id.myvideo);
  15. MediaController controller = new MediaController(this);
  16. videoView.setMediaController(controller);
  17. videoView.setVideoPath(VIDEO_PATH);
  18. videoView.requestFocus();
  19. }
  20. if (savedInstanceState != null
  21. && savedInstanceState.getInt("currentposition") != 0) {
  22. videoView.seekTo(savedInstanceState.getInt("currentposition"));
  23. }
  24. videoView.start();
  25. }

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/

时间: 2024-11-07 06:11:32

利用onSaveInstanceState()方法保存Activity状态的相关文章

Android开发之InstanceState详解(转)---利用其保存Activity状态

Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceState(),并且在介绍这两个方法之后,再分别来实现使用InstanceState保存和恢复数据功能.Android实现屏幕旋转异步下载效果这样两个示例. 首先来介绍onSaveInstanceState() 和 onRestoreInstanceState() .关于这两个方法,一些朋友可能在Andr

android 四大组件Acitivity (2) 保存activity状态 (现场保护)

Activity 现场保护 @Override protected void onSaveInstanceState(Bundle outState) { //保存数据 super.onSaveInstanceState(outState); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { //恢复数据 super.onRestoreInstanceState(savedInstance

Fragment Transactions和Activity状态丢失

本文由 伯乐在线 - 独孤昊天 翻译.未经许可,禁止转载!英文出处:androiddesignpatterns.欢迎加入翻译组. 下面的堆栈跟踪和异常代码,自从Honeycomb的初始发行版本就一直使得StackOverflow很迷惑. 1 2 3 4 5 java.lang.IllegalStateException:Can not perform this action after onSaveInstanceState     at android.support.v4.app.Fragm

保存activity的state

1.正常结束activity(back键和finish())下的保存数据:    onPause():用于保存数据操作,     原因:onPause()和onResume()是在activity中必定会执行的. onStop()不一定会执行. 2.系统因为内存不足,导致回收(即销毁)activity或者屏幕旋转时下的保存数据:       onSaveInstanceState():用于保存数据.   保存的数据可以是edittext中输入的数据,listview中item滑动到的指定位置.

保存Activity的状态

一般来说, 调用onPause()和onStop()方法后的activity实例仍然存在于内存中, activity的所有信息和状态数据不会消失, 当activity重新回到前台之后, 所有的改变都会得到保留. 但是当系统内存不足时, 调用onPause()和onStop()方法后的activity可能会被系统摧毁, 此时内存中就不会存有该activity的实例对象了. 如果之后这个activity重新回到前台, 之前所作的改变就会消失. 为了避免此种情况的发生, 开发者可以覆写onSaveIn

【Android】11.2 通过重写对应的方法保存和恢复实例的状态

分类:C#.Android.VS2015: 创建日期:2016-02-21 一.简介 通过重写(也叫回调)对应的方法来管理Activity的生命周期,比如用户旋转屏幕时应用程序要能自动保存和恢复实例的状态,这对于开发一个健壮而又灵活的应用程序而言至关重要. 1.本节要点 一旦真正理解了Activity的生命周期,就可以轻松自如地通过C#代码去控制它了.这一节我们主要学习如何用Boundle存储简单类型的数据(比如int.double.string.bool.--等). 当一个Activity停止

Android总结 - Activity任务和返回栈、保存Activity的状态

任务和返回栈 一个应用程序当中通常都会包含很多个Activity,每个Activity都应该设计成为一个具有特定的功能,并且可以让用户进行操作的组件.另外,Activity之间还应该是可以相互启动的.比如,一个邮件应用中可能会包含一个用于展示邮件列表的Activity,而当用户点击了其中某一封邮件的时候,就会打开另外一个Activity来显示该封邮件的具体内容. 除此之外,一个Activity甚至还可以去启动其它应用程序当中的Activity.打个比方,如果你的应用希望去发送一封邮件,你就可以定

Android处理运行时变更保存数据状态恢复Activity

一.概述 运行时变更就是设备在运行时发生变化(例如屏幕旋转.键盘可用性及语言).发生这些变化,Android会重启Activity,这时就需要保存activity的状态及与activity相关的任务,以便恢复activity的状态. 为此,google提供了三种解决方案: 对于少量数据: 通过onSaveInstanceState(),保存有关应用状态的数据. 然后在 onCreate() 或 onRestoreInstanceState() 期间恢复 Activity 状态. 对于大量数据:用

activity状态保存与恢复

Activity的onSaveInstanceState()和 onRestoreInstanceState()方法 Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate().onPause()等生命周期方法,它们并不一定会被触发.当应用遇到意外情况(如:内存不足.用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState()才会被调用.但是当用户主