`

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

 
阅读更多

作者 : 韩曙亮

转载请著名出处 :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 容易被销毁的时候调用, 注意是容易被销毁, 也可能没有销毁就调用了;

-- 按下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类的用法

    在Android应用开发中,Activity是核心组件之一,它充当了用户界面与应用程序逻辑之间的桥梁。Activity类位于`android.app`包中,从`java.lang.Object`派生,并依次继承了`android.content.Context`、`android.app....

    Android 中从activity1跳转到activity2再回到activity所经历的生命周期

    6. **onSaveInstanceState()**: 如果Activity可能被销毁并重新创建,此方法会被调用,以便保存当前状态。 7. **onDestroy()**: 当Activity被永久销毁时调用。这是一个可以进行资源释放的好时机。在示例代码中,没有...

    Android状态保存

    Android应用程序在运行过程中可能会因为各种原因暂时停止或被系统销毁,为了提供良好的用户体验,开发者需要掌握如何有效地保存与恢复Activity的状态。本文将详细介绍Android中用于保存Activity状态的关键方法,并...

    [Android开发从零开始].9.Activity高级学习

    在Android应用开发中,Activity是核心组件之一,它负责用户界面的展示和交互。Activity的高级学习涵盖了多个关键概念和技术,对于成为一名熟练的Android开发者至关重要。以下是对Activity高级学习的详细解析: 1. *...

    Android应用软件开发高级工程师考试试题.pdf

    - `saveInstanceState` 参数在Activity重建时用于恢复状态,它是在`onSaveInstanceState(Bundle outState)`方法中保存的,而不是自动生成的。选项D描述错误。 10. **Java继承**: - Java中一个类只能单继承,但...

    Android-Lyra简化Android组件状态的保存和恢复

    在Android应用开发中,组件(如Activity、Fragment)的状态保存和恢复是一个重要的功能,它确保了用户界面在设备旋转、应用程序被系统杀死后重启时能够恢复到之前的状态。"Android-Lyra"是一个专为简化这一过程而...

    android启动以及activity生命周期分析

    在Android开发过程中,理解应用程序如何启动及Activity的生命周期是非常重要的。这不仅有助于我们更好地管理程序的状态,还能帮助我们在遇到内存泄漏等问题时进行快速定位和解决。 #### ActivityThread `...

    Android的Activity周期 Android的Activity周期 Android的Activity周期

    如果Activity之前曾被销毁过(例如由于配置变化),则系统会传递保存的状态到savedInstanceState参数中。 ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate...

    android Activity生命周期

    在Android应用开发中,Activity是用户界面的基本单元,它负责展示屏幕上的内容并处理用户交互。Activity的生命周期是Android开发者必须深入理解的关键概念,因为它直接影响到应用的性能、内存管理和用户体验。本文将...

    深入学习Android activity

    在Android应用开发中,Activity是Android四大组件之一,它是用户界面的主要载体,承载着与用户交互的任务。深入学习Android Activity,对于理解Android应用的工作机制至关重要。以下是对Activity的详细解析,以及...

    Android应用源码之SpareParts.zip

    SpareParts采用了轻量级的状态保存策略,不同于Bundle用于Activity的onSaveInstanceState()和onRestoreInstanceState()方法。它主要适用于那些不希望或者不适合通过标准保存/恢复机制处理的轻量级状态数据。例如,...

    移动终端应用开发题库

    移动终端应用开发题库主要涉及了Android开发的基础知识,包括Activity生命周期、XML布局文件属性、资源操作、视图控件事件、应用程序目录结构、XML布局引用、尺寸单位、布局方式、AdapterView及其子类、ListView使用...

    Android高德地图开发--读取解析KML文件并显示在地图上

    在Android应用开发中,集成高德地图并利用KML(Keyhole Markup Language)文件来展示地理数据是一项常见的任务。KML是一种XML格式,用于描述2D和3D地理空间数据,广泛应用于Google Earth、Google Maps以及高德地图等...

    《Android软件开发_A卷》期末考试试卷.doc

    - **知识点概述**:Android应用程序的基本构建块之一是Activity,它是用户与应用交互的主要入口点。了解Activity如何组织对于设计良好的用户界面至关重要。 - **详细解释**: - 选项A正确,即**以栈的方式组织...

    android activity 生命週期

    在Android开发中,Activity作为四大组件之一,是用户与应用交互的主要界面,其生命周期管理对应用的稳定性和用户体验至关重要。本文将深入解析Android Activity的生命週期,并通过详细说明每个阶段的功能与作用,...

    android面试_关于Activity[参照].pdf

    在Android开发中,Activity是应用程序的核心组件之一,用于呈现用户界面并与用户进行交互。面试时,对Activity生命周期的深入理解是考察开发者技能的关键点。本文将详细解析Activity生命周期的各个阶段,以及如何...

    Android Activity和Intent机制学习笔记

    在Android开发中,Activity是最基本的应用组件之一,可以将其理解为用户界面的一个屏幕。它提供了用户与应用交互的主要场所。例如,一个应用可能包含多个Activity,每个Activity负责显示不同的界面或功能模块。 **...

    Android部分Activity篇.zip

    在Android应用开发中,Activity是Android系统中的一个核心组件,它是用户界面的载体,负责处理用户的交互事件。这篇文档“Android部分Activity篇”可能详细介绍了关于Android Activity的相关知识点,包括其概念、...

    Android编程组件及生命周期解析

    Android系统通过Activity.onSaveInstanceState方法保存状态数据,这些数据会以Bundle的形式传递给Activity.onCreate和onRestoreInstanceState,以便在组件重建时恢复状态。 线程管理是Android应用开发中的另一个...

Global site tag (gtag.js) - Google Analytics