zoukankan      html  css  js  c++  java
  • 【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 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

  • 相关阅读:
    Best Time to Buy and Sell Stock
    Remove Nth Node From End of List
    Unique Paths
    Swap Nodes in Pairs
    Convert Sorted Array to Binary Search Tree
    Populating Next Right Pointers in Each Node
    Maximum Subarray
    Climbing Stairs
    Unique Binary Search Trees
    Remove Duplicates from Sorted Array
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5346976.html
Copyright © 2011-2022 走看看