安卓基础笔记:Activity生命周期onCreate()一个参数和两个参数的区别

Activity生命周期onCreate()一个参数和两个参数的区别

	@Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i(TAG, "1、调用 onCreate(Bundle savedInstanceState) 方法,首次创建 Activity ");
    }
 	@Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
    
    
        super.onCreate(savedInstanceState, persistentState);

        Log.i(TAG,"调用 onCreate(Bundle savedInstanceState, PersistableBundle persistentState)");
    }

onCreate(Bundle savedInstanceState, PersistableBundle persistentState)是5.0给提供的新的方法,重写之前先要在配置文件AndroidManifest.xml中为Activity设置一个属性:android:persistableMode=“persistAcrossReboots”,使Activity就拥有了持久化的能力

	<activity
            android:name=".MainActivity"
            android:persistableMode="persistAcrossReboots">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

onCreate(Bundle savedInstanceState, PersistableBundle persistentState)会搭配另外两个方法来使用:


重写两个参数的onCreate()方法和两个搭配使用的方法时,发现方法的修饰符都是public,而一个参数和另外几个生命周期方法的修饰符都是protected。


	 /**onSaveInstanceState 使用情形
     * 1、点击home键回到主页或长按后选择运行其他程序
     * 2、按下电源键关闭屏幕
     * 3、启动新的 Activity
     * 4、横竖屏切换时,肯定会执行,因为横竖屏切换的时候会先销毁 Activity,
     *    然后再重新创建 重要原则:当系统"未经你许可"时销毁了你的 Activity,
     *    则onSaveInstanceState会被系统调用, 这是系统的责任,
     *    因为它必须要提供一个机会让你保存你的数据(你可以保存也可以不保存但是必须提供!)。
     */

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle persistentState) {
    
    
        super.onSaveInstanceState(outState);

        Log.i(TAG, "调用 onSaveInstanceState(Bundle outState, PersistableBundle persistentState) 方法");
    }


    /**onRestoreInstanceState
     *和onCreate同样可以从取出前者保存的数据:
     * 一般是在onStart()和onResume()之间执行!
     * 之所以有两个可以获取到保存数据的方法,是为了避免 Activity 跳转而没有关闭,
     * 然后不走onCreate()方法,而你又想取出保存数据
     */
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {
    
    
        super.onRestoreInstanceState(savedInstanceState, persistentState);

        Log.i(TAG,"调用 onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState)");
    }

Activity拥有了持久化的能力,增加的这个PersistableBundle参数令这些方法拥有了系统关机后重启的数据恢复能力,而且不影响我们其他的序列化操作。

运行程序:
MainActivity: 1、调用 onCreate(Bundle savedInstanceState) 方法,首次创建 Activity 
MainActivity: 2、调用 onStart() 方法,将 Activity 显示给用户
MainActivity: 3、调用 onResume() 方法,使 Activity 位于前台;此时Activity 位于栈顶
OpenGLRenderer: Initialized EGL, version 1.4
按下home键:
MainActivity: 执行了 onPause() 方法
MainActivity: 执行了 onStop() 方法
打开程序:
MainActivity: 执行了 onRestart() 方法
MainActivity: 2、调用 onStart() 方法,将 Activity 显示给用户
MainActivity: 3、调用 onResume() 方法,使 Activity 位于前台;此时Activity 位于栈顶
退出程序:
MainActivity: 执行了 onPause() 方法
MainActivity: 执行了 onStop() 方法
MainActivity: 执行了 onDestroy() 方法
点击程序:
MainActivity: 1、调用 onCreate(Bundle savedInstanceState) 方法,首次创建 Activity 
MainActivity: 调用 onCreate(Bundle savedInstanceState, PersistableBundle persistentState)
MainActivity: 2、调用 onStart() 方法,将 Activity 显示给用户
MainActivity: 3、调用 onResume() 方法,使 Activity 位于前台;此时Activity 位于栈顶
退出程序:
MainActivity: 执行了 onPause() 方法
MainActivity: 执行了 onStop() 方法
MainActivity: 执行了 onDestroy() 方法

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/drawababy/article/details/113681404