作者 : 韩曙亮

转载请著名出处http://blog.csdn.net/shulianghan/article/details/38297083

一. 相关方法简单介绍

1. 状态保存方法演示样例

package com.example.octopus_saveinstance;

import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
} @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
} }

2. 相关方法介绍

(1) onCreate(Bundle savedInstanceState) 方法

Activity 创建时回调 : 该方法会自己主动传入一个 Bundle 对象, 该 Bundle 对象就是上次被系统销毁时在 onSaveInstanceState 或者 onRestoreInstanceState 中保存的数据;

-- 注意 : 仅仅有是系统自己主动回收的时候才会保存 Bundle 对象数据;

-- Bundle 对象来源 : onCreate() 方法中的 Bundle 对象參数, 是在 onSaveInstance() 或者 onRestoreInstanceState() 方法中保存的 Bundle 对象;

.

(2) onSaveInstanceState(Bundle outState) 方法

outState 參数作用 :

-- 数据保存 : Activity 声明周期结束的时候, 须要保存 Activity 状态的时候, 会将要保存的数据使用键值对的形式 保存在 Bundle 对象中;

-- 恢复数据 : 在 Activity 的 onCreate()方法 创建 Activity 的时候会传入一个 Bundle 对象, 这个 Bundle 对象就是这个 outState 參数;

调用时机 : Activity easy被销毁的时候调用, 注意是easy被销毁, 也可能没有销毁就调用了;

-- 按下Home键 : Activity 进入了后台, 此时会调用该方法;

-- 按下电源键 : 屏幕关闭, Activity 进入后台;

-- 启动其他 Activity : Activity 被压入了任务栈的栈底;

-- 横竖屏切换 : 会销毁当前 Activity 并又一次创建;

onSaveInstanceState方法调用注意事项 :

-- 用户主动销毁不会调用 : 当用户点击回退键 或者 调用了 finish() 方法, 不会调用该方法;

-- 调用时机不固定 : 该方法一定是在 onStop() 方法之前调用, 可是不确定是在 onPause() 方法之前 还是 之后调用;

-- 布局中组件状态存储 : 每一个组件都 实现了 onSaveInstance() 方法, 在调用函数的时候, 会自己主动保存组件的状态, 注意, 仅仅有有 id 的组件才会保存;

-- 关于默认的 super.onSaveInstanceState(outState) : 该默认的方法是实现 组件状态保存的;

(3) onRestoreInstanceState(Bundle savedInstanceState) 方法

方法回调时机 : 在 Activity 被系统销毁之后 恢复 Activity 时被调用, 仅仅有销毁了之后重建的时候才调用, 假设内存充足, 系统没有销毁这个 Activity, 就不须要调用;

-- Bundle 对象传递 : 该方法保存的 Bundle 对象在 Activity 恢复的时候也会通过參数传递到 onCreate() 方法中;

-- 位于生命周期位置吧 : 该方法在 onResume() 方法之前保存信息;

二 代码演示样例

Activity 主要代码 :

package com.example.octopus_saveinstance;

import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState != null)
System.out.println("onCreate() : " + savedInstanceState.getString("octopus"));
} @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
System.out.println("onRestoreInstanceState() : " + savedInstanceState.getString("octopus"));
} @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); outState.putString("octopus", "www.octopus.org.cn");
System.out.println("onSaveInstanceState() : save date www.octopus.org.cn");
} }

执行结果 : 在执行的过程中 旋转屏幕;

I/System.out( 8167): onSaveInstanceState() : save date www.octopus.org.cn
I/System.out( 8167): onCreate() : www.octopus.org.cn
I/System.out( 8167): onRestoreInstanceState() : www.octopus.org.cn

作者 : 韩曙亮

转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083

【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析的更多相关文章

  1. 【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析

    作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083 一. 相关方法简介 1. 状态保存方法示例 p ...

  2. Android学习总结——Activity状态保存和恢复

    Android中启动一个Activity如果点击Home键该Activity是不会被销毁的,但是当进行某些操作时某些数据就会丢失,如下: Java class: package com.king.ac ...

  3. Python命令行选项參数解析策略

    概述 在Python的项目开发过程中,我们有时须要为程序提供一些能够通过命令行进行调用的接口.只是,并非直接使用 command + 当前文件 就ok的,我们须要对其设置可选的各种各样的操作类型.所以 ...

  4. 百度URL參数解析

    百度URL參数解析 在用Python爬取百度搜索的内容时,发现百度搜索的url非常的长.往往会跟一大段的參数,但事实上非常多參数都是没有必要的,如相同是搜索javakeyword,能够通过 http: ...

  5. linux kernel的cmdline參数解析原理分析

    利用工作之便,今天研究了kernel下cmdline參数解析过程.记录在此.与大家共享.转载请注明出处.谢谢. Kernel 版本:3.4.55 Kernel启动时会解析cmdline,然后依据这些參 ...

  6. activity状态保存的bundl对象存放位置的思考

    我们知道,当activity被异常终止时,可以把一些信息保存到bundle对象中,在下次启动时恢复. 那么,这个bundle对象是保存在哪里的呢? 这种状态保存的方法针对的是activity而不是进程 ...

  7. struts开发<struts中的參数传递.三>

    不说废话,直接上干货 1.通过set和get传递參数 添加username 和password两个属性并添加set和get方法 package fzl.user.struts.demo; import ...

  8. cmake函数參数解析

    近期在迁移公司的make系统到cmake上.发现cmake的function參数非常奇怪.比如,假设我们向一个function传递list作为參数,在function中,形參会变成例如以下状况: se ...

  9. python 命令行參数解析

    本文是从我还有一个博客转载过来的,欢迎大家点击进去看一下,帮我添加点人气^_^ ImPyy 选择模块 依据python參考手冊的提示,optparse 已经废弃,应使用 argparse 教程 概念 ...

随机推荐

  1. 代理服务器squid

    http://www.baidu.com/s?wd=squid%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8&f=12&rsp=0& ...

  2. lnmp 安装环境之后discuz论坛排版乱的问题

    服务器系统类型:centos 6.5 环境:使用lnmp官方安装shell安装 (http://lnmp.org/install.html) 在部署dz之后,访问页面 出现排版乱,资源不能加载的问题: ...

  3. UPC 2224 Boring Counting ★(山东省第四届ACM程序设计竞赛 tag:线段树)

    [题意]给定一个长度为N的数列,M个询问区间[L,R]内大于等于A小于等于B的数的个数. [题目链接]http://acm.upc.edu.cn/problem.php?id=2224 省赛的时候脑抽 ...

  4. Spring depends-on介绍

    <!-- redis配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.Jedis ...

  5. 【转】eclipse新建项目,报错“Error: workspace\appcompat_v7\res\values-v21\styles_base.xml No resource found that matches the given name”

    原文网址:http://www.cnblogs.com/mbp-study/p/5268478.html 新建项目报错,不知道为什么,以前从未出现过的错误,把sdk更新之后,出现莫名错误,自己也是一知 ...

  6. TortoiseGit连接github不用每次输入用户名和密码的方法

    每次git clone 和push 都要输入用户名和密码.虽然安全,但在本机上每次都输有些麻烦,如何记住用户名和密码呢? 当你配置好git后,在C:\Documents and Settings\Ad ...

  7. 安装VS2015出现的bug,各位安装请注意

    昨天微软发布了vs2015 迫不及待的下载下来安装体验了一把,但是机器上同时安装有vs2010.vs2012.vs2013 .安装完成后,因为公司项目需要开发,打开vs2012 ,有如下提示: 百度查 ...

  8. Query Profiler 和Explain 用法详解

    一.Query Profiler  MySQL 的Query Profiler 是一个使用非常方便的Query 诊断分析工具,通过该工具可以获取一条Query 在整个执行过程中多种资源的消耗情况,如C ...

  9. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (四) Q 反回调

    上一篇文章“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) SqlServ ...

  10. Linux新手必看:浅谈如何学习linux

    本文在Creative Commons许可证下发布 一.起步 首先,应该为自己创造一个学习linux的环境--在电脑上装一个linux或unix问题1:版本的选择 北美用redhat,欧洲用SuSE, ...