1.4Activity保存现场状态

概念:

保存Activity的状态是非常重要的,例如我们在玩一个游戏的时候,突然来了一个电话,这个时候在接听完电话之后我们返回到游戏中,这个时候我们希望游戏还是之前那个进度,或者说发生突发事件,游戏这个应用程序被关闭了,这个时候我们如果再重新打开游戏的话,我们如果还是希望回到之前的进度,我们就需要将其状态保存起来,这样在Activity的摧毁时,我们还能够根据保存的状态回到之前的进度。这就是Activity的状态保存。

 

生命图:

 

一般来说, 调用onPause()和onStop()方法后的activity实例仍然存在于内存中, activity的所有信息和状态数据不会消失, 当activity重新回到前台之后, 所有的改变都会得到保留. 

但是当系统内存不足时, 调用onPause()和onStop()方法后的activity可能会被系统摧毁, 此时内存中就不会存有该activity的实例对象了. 如果之后这个activity重新回到前台, 之前所作的改变就会消失. 为了避免此种情况的发生, 开发者可以覆写onSaveInstanceState()方法. onSaveInstanceState()方法接受一个Bundle类型的参数, 开发者可以将状态数据存储到这个Bundle对象中, 这样即使activity被系统摧毁, 当用户重新启动这个activity而调用它的onCreate()方法时, 上述的Bundle对象会作为实参传递给onCreate()方法, 开发者可以从Bundle对象中取出保存的数据, 然后利用这些数据将activity恢复到被摧毁之前的状态.

需要注意的是, onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的. 比如用户按下BACK键退出activity时, 用户显然想要关闭这个activity, 此时是没有必要保存数据以供下次恢复的, 也就是onSaveInstanceState()方法不会被调用. 如果调用onSaveInstanceState()方法, 调用将发生在onPause()或onStop()方法之前,所以我们在onSaveInstanceState() 方法中只能用来保存我们的Activity的临时的状态信息,而对于要持久化保存的对象或状态,我们应该在 onPause() 方法中来做

 

界面:

 

代码:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends Activity {private static final String TAG = "logmain";private Button button;private EditText name;private CheckBox soccer;private CheckBox basketball;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);name = (EditText) this.findViewById(R.id.editText);soccer = (CheckBox) this.findViewById(R.id.cbsoccer);basketball = (CheckBox) this.findViewById(R.id.cbbasketball);button = (Button) this.findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent i = new Intent(MainActivity.this, NextActivity.class);startActivity(i);}});//通过onCreate取值if (savedInstanceState != null) {String s = savedInstanceState.getString("name");boolean cbsoccer = savedInstanceState.getBoolean("soccer");boolean cbbasketball = savedInstanceState.getBoolean("basketball");//测试1/* name.setText("oncreatename");soccer.setChecked(true);basketball.setChecked(false);*///赋值1
            name.setText(s);soccer.setChecked(cbsoccer);basketball.setChecked(cbbasketball);}Log.i(TAG, "---Main onCreate---");}@Overrideprotected void onStart() {super.onStart();Log.i(TAG, "---Main onStart---");}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {//调用activity的onRestoreInstanceState得到保存的值//如果赋值1注释了 测试1开放  再把 super.onRestoreInstanceState(savedInstanceState)和通过onRestoreInstanceState取值注释//旋转屏幕就是测试1的值super.onRestoreInstanceState(savedInstanceState);//通过onRestoreInstanceState取值/*if (savedInstanceState != null) {String s = savedInstanceState.getString("name");boolean cbsoccer = savedInstanceState.getBoolean("soccer");boolean cbbasketball = savedInstanceState.getBoolean("basketball");//测试2//name.setText("onrestorename");//soccer.setChecked(false);//basketball.setChecked(true);//赋值2name.setText(s);soccer.setChecked(cbsoccer);basketball.setChecked(cbbasketball);}*/Log.i(TAG, "---Main onRestoreInstanceState---");}@Overrideprotected void onResume() {super.onResume();Log.i(TAG, "---Main onResume---");}@Overrideprotected void onPause() {super.onPause();Log.i(TAG, "---Main onPause---");}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);//通过onSaveInstanceState存值outState.putString("name", name.getText().toString().trim());outState.putBoolean("soccer", soccer.isChecked());outState.putBoolean("basketball", basketball.isChecked());Log.i(TAG, "---Main onSaveInstanceState---");}@Overrideprotected void onStop() {super.onStop();Log.i(TAG, "---Main onStop---");}@Overrideprotected void onRestart() {super.onRestart();Log.i(TAG, "---Main onRestart---");}@Overrideprotected void onDestroy() {super.onDestroy();Log.i(TAG, "---Main onDestroy---");}}

 

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.liang.activitydemo.MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textAppearance="?android:attr/textAppearanceMedium"android:text="Name:"android:id="@+id/tvok"android:layout_alignParentTop="true"android:layout_alignParentStart="true" /><EditTextandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:inputType="textPersonName"android:ems="10"android:id="@+id/editText"android:layout_alignParentTop="true"android:layout_toEndOf="@+id/tvok" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textAppearance="?android:attr/textAppearanceMedium"android:text="Hobby:"android:id="@+id/tvhobby"android:layout_below="@+id/editText"android:layout_alignParentStart="true" /><CheckBoxandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Soccer"android:id="@+id/cbsoccer"android:layout_below="@+id/editText"android:layout_toEndOf="@+id/tvhobby"android:checked="false" /><CheckBoxandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Basketball"android:id="@+id/cbbasketball"android:layout_below="@+id/editText"android:layout_toEndOf="@+id/cbsoccer"android:checked="false" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Next"android:id="@+id/button"android:layout_below="@+id/cbsoccer"android:layout_alignParentStart="true" /></RelativeLayout>

 

测试:注意顺序

06-04 10:41:19.454 28735-28735/com.liang.activitydemo I/logmain: ---Main onPause---
06-04 10:41:19.454 28735-28735/com.liang.activitydemo I/logmain: ---Main onSaveInstanceState---(存值)
06-04 10:41:19.454 28735-28735/com.liang.activitydemo I/logmain: ---Main onStop---
06-04 10:41:19.454 28735-28735/com.liang.activitydemo I/logmain: ---Main onDestroy---
06-04 10:41:19.542 28735-28735/com.liang.activitydemo I/logmain: ---Main onCreate---(取值方法1)
06-04 10:41:19.542 28735-28735/com.liang.activitydemo I/logmain: ---Main onStart---
06-04 10:41:19.546 28735-28735/com.liang.activitydemo I/logmain: ---Main onRestoreInstanceState---(取值方法2)
06-04 10:41:19.546 28735-28735/com.liang.activitydemo I/logmain: ---Main onResume---

转载于:https://www.cnblogs.com/manusas/p/5519644.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430475.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙系统什么时候超过苹果,为何任正非说鸿蒙系统想超过苹果系统需要的时间,不会超过300年...

还记得任正非的一段话&#xff1a;华为操作系统要想超安卓苹果&#xff0c;需要很长时间&#xff0c;但不会超过 300 年。我相信这段话并不是说华为系统要超过苹果手机&#xff0c;需要300年的时间。任正非只是解释了华为系统目前和安卓系统以及苹果系统还有一定的差距&#xf…

android开发设计平台,10款开发和设计应该安装的android应用

过去几年里有很多新开发的小工具出现&#xff0c;人们的生活越来越离不开智能机&#xff0c;当然包括android手机&#xff0c;它已经成为了人们的最大需求量之一&#xff0c;市场上出现的android手机也越来越多&#xff0c;人们也比较喜欢用andorid手机。因为相对而言&#xff…

html的div显示到最左侧,HTML/CSS:如何淡化div的左右边缘?

嗨&#xff0c;我想淡出div和它的内容从左和右边缘使用纯CSS。 目前&#xff0c;我能够根据一个关于堆栈溢出的问题的答案来实现这一点。null.container {height: 234px;width: 234px;overflow: scroll;mask-image: linear-gradient(transparent,black 20%,black 80%,transpare…

android 微积分计算器,高数计算器1.0(高数计算工具app)

高数计算器1.0是手机上的一款免费好用的高数计算工具app&#xff0c;利用它&#xff0c;用户就可以进行快速进准的高等数学计算操作&#xff0c;范围包涵函数偏导、泰勒展开、一重积分、二重积分以及Latex编辑等等。详细内容请感兴趣的朋友前来西西下载体验&#xff01;应用简介…

教你搞定Android自定义View

Android App开发过程中&#xff0c;很多时候会遇到系统框架中提供的控件无法满足我们产品的设计需求&#xff0c;那么这时候我们可以选择先Google下有没有比较成熟的开源项目可以让我们用&#xff0c;当然现在Github上面的项目非常丰富&#xff0c;能够满足我们绝不多数的开发需…

将游戏成绩传到排名页面html,用野狗开发实时游戏排行榜

创建wilddog应用填写应用名称和应用ID就可以创建了。应用ID需要全网唯一创建成功之后就可以在控制面板看到应用了.1.引入SDK2.创建引用ref Wilddog("https://.wilddogio.com/")//将替换成申请的应用IDref Wilddog("https://fullstack-top-demo.wilddogio.com/…

波士顿大学计算机与传媒专业,波士顿大学传媒专业好吗

波士顿大学传媒专业是美国历史上最早的可以授予公共关系学位的大学&#xff0c;它是世界历史上培养得最多的公共关系学者的一所学校。在美国所有新闻传媒专业的排名来讲&#xff0c;波士顿大学传媒专业全美排名也是在前10名的&#xff0c;而在全世界的排名上则是位于前50名的超…

html5 deckview,六本木Hills出現超大型巨人?進擊的巨人展FINAL×頂樓Sky Deck的VR體驗...

戶外複合型度假區「相模湖森林度假遊樂園」將從2019年7月20日(六)&#xff5e;8月30日(五)這段期間展開超人氣動畫《進擊的巨人》與超人氣競技設施「MUSCLE MONSTER」的合作企劃「進擊的企劃『MUSCLE MONSTER』」活動&#xff01;這次的活動是為了紀念7月5日(五)&#xff5e;9月…

surface系列平板电脑属于微型计算机,什么是Surface平板电脑 微软的Surface平板电脑泽怎么样...

什么是Surface平板电脑?微软的Surface平板电脑是什么?Surface平板电脑分两个版本一个是运行Windows RT系统&#xff0c;搭载ARM处理器(类似于大多手机和平板电脑)&#xff0c;9.3毫米(比iPad薄一点)&#xff0c;676g(比iPad重一点)&#xff0c;配有10.6英寸ClearType高清显示…

用户注意到用户计算机中千兆位网卡,为何你电脑上的千兆网卡跑不到千兆?

这几天谈了不少网络方面的知识和教程&#xff0c;基本上已经脱离百兆的温饱线&#xff0c;走向了高大上的千兆小康生活……事实上&#xff0c;对于目前的硬件环境而言&#xff0c;无论是路由器、网卡、光纤、网线&#xff0c;仅从带宽而言&#xff0c;达到千兆毫无难度&#xf…

安卓学习日记:初识Android Studio · java环境配置和AS安装

工欲善其事&#xff0c;必先利其器。要进行安卓开发&#xff0c;必须要有一款上手的开发利器。查阅了相关资料后&#xff0c;了解到&#xff0c;现在主流的安卓开发工具是&#xff1a; 1. Eclipse Android SDK 2. Android Studio 因为安卓的开发语言是 java&#xff0c;所以…

sql 递归查询

1、既然要谈到sql&#xff0c;数据库表是必须的 2、数据结构 3、获取某个节点的所有子节点 传统的写法&#xff08;sql2000&#xff09; 很麻烦&#xff0c;暂且就不写了 来看看CTE的写法 CREATE PROC sp_getTreeById(TreeId int) AS BEGIN WITH cteTree AS (SELECT * FROM Tuz…

计算机画画教程,【推荐】初学者电脑画画教程

电脑绘画教程&#xff0c;今天跟大家分享一下&#xff0c;如何学电脑绘画以及关于零基础学板绘是不是一定要美术基础的问题~~这也是很多学习电脑绘画小伙伴的疑虑。如果你想快速提升自己的绘画水平&#xff0c;并且绝对的不怕辛苦&#xff0c;欢迎挑战轻微课魔鬼特训班&#xf…

python 中调用shell命令

subprocess模块 根据Python官方文档说明&#xff0c;subprocess模块用于取代上面这些模块。有一个用Python实现的并行ssh工具—mssh&#xff0c;代码很简短&#xff0c;不过很有意思&#xff0c;它在线程中调用subprocess启动子进程来干活。 [python] view plaincopy >>&…

一台计算机数据丢失与恢复,如何在不丢失数据的情况下将iPhone与多台计算机同步-万兴数据恢复-万兴恢复专家...

第2部分&#xff1a;将iPhone与多台计算机与iTunes同步如果用户对iPhone有很强的控制欲&#xff0c;并且不想尝试使用任何新软件来同步需求&#xff0c;那么iTunes也可用于将iPhone与多台计算机同步。虽然在第一时间&#xff0c;这可能听起来和iTunes的职能相悖&#xff0c;但实…

iOS OC语言: Block底层实现原理

来源http://www.wtoutiao.com/p/11dgbk4.html 先来简单介绍一下Block Block是什么&#xff1f; 苹果推荐的类型&#xff0c;效率高&#xff0c;在运行中保存代码。用来封装和保存代码&#xff0c;有点像函数&#xff0c;Block可以在任何时候执行。 Block和函数的相似性&#xf…

计算机如何取消还原卡,如何关闭硬件还原卡?

2009-11-06有什么方法可以让电脑每次关机都可以自动删1)打开控制面板/性能维护/管理工具/双击本地安全策略&#xff0c;在右侧选“关机清理虚拟内存页面文件”双击他选“已启用”按应用重启即可。2)建议下载超级兔子是免费的小巧著名的软件&#xff0c;选择清理系统垃圾(全选)&…

服务器虚拟主机推荐,免费的虚拟主机推荐

写在前面&#xff1a;免费虚拟主机免费虚拟主机是指IDC服务商“免费”为站长提供网页寄存服务。免费虚拟主机--用于制作免费个人网站&#xff0c;是学习网页设计的好方法。虚拟主机就是指网站空间&#xff0c;是在网络服务器上划分出一定的磁盘空间供用户放置站点、应用组件等&…

js/css文件修改后浏览器本地缓存解决

本文实例讲述了让html页面随js的修改来更新缓存的实现方法。分享给大家供大家参考。具体实现方法如下&#xff1a; 很多朋友都会碰到这样的情况&#xff1a;如果我们页面加载了js的话下次打开时也会是调用这个js缓存文件&#xff0c;但对于我们修改后调试和发布是非常的不方便了…

js中报错 ajax不存在,AJAX

AJAX : Asynchronous JavaScript and XML 异步JavaScript和XML (XML更多的是被JSON格式替代使用)AJAX 只做一件事情&#xff1a;异步获取数据&#xff0c;更为重要的是还是JS对返回的数据进行操作。异步获取数据极大地改善web与用户的数据交互(如下图左侧为传统web,右侧为借…