onCreate方法中saveInstanceState参数的作用

示例代码:

public class MainActivity extends ActionBarActivity {

	private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (null != savedInstanceState) {
        	int intType = savedInstanceState.getInt("intType");
        	String stringType = savedInstanceState.getString("stringType");
        }
        setContentView(R.layout.activity_main);
        Log.i(TAG, "onCreate----执行了--------");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
    	super.onRestoreInstanceState(savedInstanceState);
    	int intType = savedInstanceState.getInt("intType");
    	String stringType = savedInstanceState.getString("stringType");
    	Log.i(TAG, "onRestoreInstanceState----执行了--------");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
    	super.onSaveInstanceState(outState);
    	outState.putInt("intType", 0);
    	outState.putString("stringType", "保存的");
    	Log.i(TAG, "onSaveInstanceState----执行了--------");
    }
}

onSaveInstanceState方法会在什么时候执行?

1.当用户按下HOME键时。

这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道acitvity A是否会被销毁所以系统会调用onSaveInstanceState,让用户有机会保存某些非永久性数据,以下几种分析都遵循该原则。

2.长按HOME键,选择运行其他的程序时。

3.按下电源键(关闭屏幕显示)时。

4.从activity A中启动一个新的activity时。

5.屏幕方向切换时。

onRestoreInstanceState方法会在什么时候执行?

activity A"确实"被系统销毁了,而如果仅仅停留在有这种可能性的情况下,则该方法是不会被调用的,例如,当正在显示acitivty A的时候,用户按下HOME键回到主界面,然后用户紧挨着又返回activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,所以activity A的onRestoreInstanceState方法不会被执行。

时间: 2024-08-27 18:22:03

onCreate方法中saveInstanceState参数的作用的相关文章

转载:onCreate()方法中的参数Bundle savedInstanceState 的意义用法

Activity中有一个名称叫onCreate的方法.该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始.可是有一点容易被忽视,就是onCreate方法的参数saveInsanceState.一般的程序开发中,很少用到这个参数.       onCreate方法的完整定义如下:      public void onCreate(Bundle saveInsanceState){                super.onCreate(saveInsanceSt

在Activity的onCreate方法中显示PopupWindow导致异常的原因分析及解决方案

一.前言 在某些情况下,我们需要一进入Activity就显示PopupWindow,比如常见的选择界面.但由于PopupWindow是依附于Activity的,如果Activity没有创建完成,Activity还没完全显示出来就显示PopupWindow的话,会出现异常现象. 二.问题复现 我在Activity的onCreate()方法中调用如下方法: public void show( ){ if( null != mPopupWindow ){ mPopupWindow.showAtLoca

如何在onCreate方法中获取视图的宽度和高度

你可以通过视图的getWidth()和getHeight()来获取视图的宽度和高度. 但是,可能会让你失望的是,如果你直接在onCreate方法内调用这两个函数,你会的到0. 为什么呢? 这是因为,当onCreate被调用的时候,视图的内容正在被LayoutInflater来填充xml布局. 这个过程会填充布局,但是暂时不会设置视图的大小. 那么视图到底什么时候获得自己的大小尺寸呢? 实际上是在Layout以后,而layout又是在onCreate调用以后. 那么,如果我们要在onCreate方

Main方法中传入参数

↓ 这个时候会报错: Instantiate the class:DonutShop java.lang.ClassNotFoundException: DonutShop    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)    at java.security.AccessController.doPrivileged(Native Method)    at java.net.URLClassLoader.findCla

在Activity的oncreate方法中如果跳转到别的activity,会发生什么

真是日*狗,即便你跳转到别的Activity,其余的代码一样执行 首先做实验,证明它就是这样发生的 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); System.out.println("aaaaaaaaaaaaaaaaaa"); new Thread(new R

如何在onCreate()方法中,获取得到控件的宽度和高度?小意思!

在onCreate()方法中,如果想获得控件的宽度高度,那就要使用下面的方法了. orderTime.post(new Runnable() { @Override public void run() { System.out.println("高"+orderTime.getHeight()); System.out.println("宽"+orderTime.getWidth()); } }); 其中,orderTime是一个TextView.当然,这里只是一个

ajax 方法的使用以及方法中各参数的含义

由于近来经常在项目中使用 ajax 这个函数,在工作之余自己查找了相关的资料,并总结了 ajax 方法的使用,以及方法中各个参数的含义,供大家学习参考使用 type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持. timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设 置. async:要求为Boolean类型的参数

HackThirteen 在onCreate()方法中获取View的宽度和高度

1.概要: Android源代码中很多模块都使用了post()方法,深入理解框架曾运行机制对于避开类似于本例中的小陷阱是很重要的 2.问题提出: 如果开发一些依赖于UI控件的宽和高的功能,开发者可能会用到View的getHeight()和getWidth()方法.试图在Activity的 onCreate()方法中获取控件的宽和高.遗憾的是如果开发者在onCreate()方法中调用上述方法,会发现返回值都是0. 3.解释问题原因: 当onCreate()方法被调用时,会通过LayoutInfla

Android查缺补漏(View篇)--在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0?

在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0 ? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_view); myview = ViewUtils.find(this, R.id.myview); getViewSize("onCr