Activity的生命周期
正常的Activity生命周期
- 启动 onCreate -> onStart -> onResume
- 当跳转到另一个Activity时,当前Activity先onPause,跳转的Activity执行onCreate -> onStart -> onResume 后,当前的Activity执行onStop
- 当用户返回原Activity时,当前Activity先onPause,原Activity执行onRestart -> onStart -> onResume 后,当前的Activity执行onStop -> onDestyoy
跳转的Activity为透明主题
- 当跳转到透明主题Activity时,当前Activity先onPause,跳转的透明主题Activity执行onCreate -> onStart -> onResume 后,当前的Activity 不会执行 onStop
- 当透明主题跳转的不透明主题时,透明主题Activity执行onPause后,最初Activity会执行onStop(因为不可见了),跳转的不透明主题Activity执行onCreate -> onStart -> onResume 后,透明主题Activity 会执行 onStop
- 当从不透明主题返回透明主题时,当前的Activity执行onPause后,最初的Activity执行onRestart -> onStart , 而后才会到透明主题Activity的创建onCreate -> onStart -> onResume,不透明主题执行onStop -> onDestyoy
- 当透明主题Activity返回到最初Activity时,透明主题Activity执行onPause,最初的Activity执行onResume(不执行onRestart -> onStart,因为最初Activiyu是可见的,没有执行到onStop),透明主题Activity执行onStop -> onDestyoy
屏幕切换时Activity的生命周期
屏幕切换是会先销毁当前Activiy并重建此Activity,具体流程为onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume
其中onSaveInstanceState用于保存信息,而onRestoreInstanceState用于还原信息,view中也有onSaveInstanceState与onRestoreInstanceState方法,比如EditView,但EditText需要设置id才有效
在Activity中onSaveInstanceState与onRestoreInstanceState都有两种不同参数的方法,一种是(Bundle outState),另一种是(Bundle outState, PersistableBundle outPersistentState),第二种是API21新增的,使Activity拥有持久化能力
要使用第二种方法要在配置文件中为我们的Activity设置一个属性:android:persistableMode=”persistAcrossReboots”
会在下述情形中被调用:
- 点击home键回到主页或长按后选择运行其他程序
- 按下电源键关闭屏幕
- 启动新的Activity
- 横竖屏切换时,肯定会执行,因为横竖屏切换的时候会先销毁Act,然后再重新创建 重要原则:当系统”未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(你可以保存也可以不保存)。
Activity的其他方法
- onWindowFocusChanged 在Activity窗口获得或失去焦点时被调用
获取焦点时调用
失去焦点时调用
- onApplyThemeResource 设置主题时调用,第一次调用在onCreate()前,使用setTheme()方法也会调用
- onConfigurationChanged 在AndroidManifest.xml给Activity配置了相应的configChanges属性,这个时候Activity就不会摧毁后重新创建Activity,而只会回调此方法