属于 Android
四大组件之一:Activity
、Service
、BroadcastReceiver
、ContentProvider
。
显示界面 & 与用户进行交互。
- 一个 Activity 通常是一个界面,是四大组件唯一能被用户感知的;
- 每个活动被实现为一个独立的类, & 从活动基类继承过来;
- Activity 之间通过 Intent 进行通信。
生命周期:onCreate() -> onStart() - > onResume() -> onPause() -> onStop() -> onDestroy()
-
启动 Activity:系统先调用 onCreate(),然后调用 onStart(),最后调用 onResume()方法,Activity 进入运行状态。
-
Activity 被其他 Activity 覆盖其上(DialogActivity)或者锁屏:系统会调用 onPause() 方法,暂停当前 Activity 的执行。
-
当前 Activity 由被覆盖状态回到前台或者解锁屏:系统会调用 onResume() 方法,再次进入运行状态。
-
当前 Activity 转到新的 Activity 界面或按 Home 键回到主屏,自身退居后台:系统会先调用onPause() 方法,然后调用 onStop() 方法,进入停滞状态。
-
用户后退回到此 Activity:系统会先调用 onRestart() 方法,然后调用 onStart() 方法,最后调用 onResume() 方法,再次进入运行状态。
-
当前 Activity 处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前 Activity,而后用户退回当前 Activity:再次调用 onCreate() 方法、onStart() 方法、onResume() 方法,进入运行状态。
-
用户退出当前 Activity:系统先调用 onPause() 方法,然后调用 onStop() 方法,最后调用onDestory() 方法,结束当前 Activity。
-
onRestart():表示 Activity 正在重新启动 ,一般情况下,当前 Activity 从不可见重新变成可见状态时,onRestart() 就会被调用,这种情形一般是用户行为所导致的,比如用户按 Home 键切换到桌面然后重新打开 APP 或者按 Back 键。
-
onStart():Activity 可见了,但是还没有出现在前台,还无法和用户交互。
-
onPause():表示 Activity 正在停止,此时可以做一些存储数据,停止动画等工作,注意不能太耗时,因为这会影响到新 Activity 的显示,onPause() 必须先执行完,新的 Activity 的onResume() 才会执行。
-
从 Activity 是否可见来说,onStart() 和onStop()是配对的,从activity是否在前台来说,onResume()和onPause()是配对的。
-
旧 Activity 先 onPause(),然后新 Activity 再启动。
注意:当 Activity 中弹出 Dialog 对话框的时候,Activity 不会回调onPause()。 然而当 Activity 启动 Dialog 风格的 Activity 的时候,此 Activity 会回调 onPause() 函数。
三、异常情况下的生命周期 情况1:资源相关的系统配置发生改变导致 Activity 被杀死并重新创建比如说当前 Activity 处于竖屏状态,如果突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity 就会被销毁并且重新创建,当然我们也可以组织系统重新创建我们的 Activity。 系统配置发生改变以后,Activity 会销毁,其 onPause(),onStop(),onDestory()均会被调用,由于 Activity 是在异常情况下终止的,系统会调用 onSaveInstance() 来保存当前 Activity 状态,这个方法的调用时机是在 onStop() 之前。与 onPause() 没有既定的时序关系,当 Activity 重新创建后,系统会调用 onRestoreInstanceState(),并且把 Activity 销毁时 onSaveInstanceState()方法保存的 Bundle 对象作为参数同时传递给 onRestoreInstanceState() 和 onCreate() 方法。 同时,在 onSaveInstanceState() 和 onRestoreInstanceState() 方法中,系统自动为我们做了一些恢复工作,如:文本框(EditeText)中用户输入的数据,ListView 滚动的位置等,这些 View相关的状态系统都能够默认为我们恢复。可以查看 View 源码,和 Activity 一样,每个 View 都有 onSaveInstanceState()方法和onRestoreInstanceState()方法。
这里的情况和前面的情况1数据存储和恢复是完全一致的,Activity 按照优先级从高到低可以分为如下三种: (1)前台 Activity — 正在和用户交互的Activity,优先级最高 (2)可见但非前台 Activity — 比如 Activity 中弹出了一个对话框,导致 Activity 可见但是位于后台无法和用户直接交互。 (3)后台 Activity — 已经被暂停的 Activity,比如执行了 onStop(),优先级最低。
横竖屏切换,防止重新创建 Activity:Activity 指定 configChange 属性来不让系统重新创建Activity。 android : configChanges = “orientation”
四、Activity 与 Fragment 生命周期关系创建过程: 销毁过程:
1. 生命周期方法是成对出现(配对)
- onCreate() & onDestory()
- onStart() & onStop()
- onResume() & onPause()
2. onStart() & onStop()、onResume() & onPause() 除了回调时刻,在实际使用中无任何区别
- onStart() & onStop() :从 Activity 是否完全可见的角度 进行回调
- onResume() & onPause(): 从 Activity 是否位于前台(UI最顶层)的角度进行回调;
3. 当前 Activity 为 A,此时用户打开 ActivityB后,那么 A 的 onPause()和 B 的 onResume() 哪个方法先执行? 先 A的onPause() ,再B的onResume()