android-基础知识-生命周期
概述
主要涉及的生命周期有
- Activity
- Fragment
- Service
- Application
- View
一、Activity生命周期
包括 onCreate onStart onResume onPause onStop onDestroy
共计 6个
其中还涉及到 onRestart onSaveInstanceState onRestoreInstanceState 等
1.各方法代表的意义:
(1)onCreate() ,不可见状态
在Activity被创建时回调,第一个生命周期。我们一般在创建Activity时需要重写该方法做一些初始化的操作,如通过setContentView设置界面布局的资源,初始化所需要的组件信息等。
(2)onStart() ,可见状态
该方法回调表示Activity正在启动,此时Activity处于可见状态,只是还没有在前台显示,因此用户也无法交互。可以简单理解为Activity已显示却无法被用户看见。
(3)onResume() ,可见状态
此方法回调时,Activity已在在屏幕上显示UI并允许用户操作了。从流程图可见,当Activity停止后(onPause、onStop方法被调用),重新回到前台时也会调用onResume方法。可以在onResume方法中初始化一些资源,比如打开相机或开启动画。
(4)onPause() ,可见状态
此方法回调时,Activity正在停止(Paused形态),通常接下来onStop()会被回调。但通过流程图可见,另一种情况是onPause()执行后直接执行了onResume方法,这可能是用户点击Home键,让程序退回到主界面,程序在后台运行时又迅速地再回到到当前的Activity,此时onResume方法就会被回调。我们可以在onPause方法中做一些数据存储、动画停止、资源回收等操作。另外,onPause方法执行完成后,新Activity的onResume方法才会被执行。所以onPause 不能太耗时,因为这可能会影响到新的Activity的显示。
(5)onStop() ,不可见状态
此方法回调时, Activity即将停止或者完全被覆盖(Stopped形态),此时Activity不可见,仅在后台运行。同样地,在onStop方法可以做一些资源释放的操作,不能太耗时。
(5) onRestart(),可见状态
此方法回调时,表示Activity正在重新启动,由不可见状态变为可见状态。这种情况,一般发生在用户打开了一个新的Activity时,之前的Activity就会被onStop,接着又回到之前Activity页面时,之前的Activity的 onRestart方法就会被回调。
(6)onDestroy() ,不可见状态
此方法回调时,表示 Activity正在被销毁,也是生命周期最后一个执行的方法,一般我们可以在此方法中做一些回收工作和最终的资源释放。
2.onSavedInstanceState()和onRestoreInstanceState() 理解:
2.1 onSavedInstanceState()和onRestoreInstanceState()并不是activity生命周期的方法。
- onSaveInstanceState()会在onPause()或onStop()之前执行;
- onRestoreInstanceState()会在onStart()和onResume()之间执行。
2.2 onRestoreInstanceState()会跟onSaveInstanceState()不一定成对出现
onSaveInstanceState()需要调用的时,activity可能销毁,也可能没有销毁,只有在activity销毁重建的时候onRestoreInstanceState()才会调用。
3.Activity 页面跳转生命周期
- A->B
- A->透明B
- 栈内有ABC其中B是SingTask 跳转B
- 栈内有AB其中B是SingTop 跳转B
3.1 A->B
- A: onPause
- B: onCreate onStart onResume
- A: onStop
B按返回键:
- B: onPause
- A: onRestart onStart onResume
- B: onStop onDestroy
3.2 A->透明B
- A: onPause
- B: onCreate onStart onResume
- 注意: (A 没有调用onStop)
B按返回键:
- B: onPause
- A: onResume
- B: onStop onDestroy
- 注意: (A 没有调用onRestart onCreate)
3.3 栈内有ABC其中A是SingTask 跳转A
- B: onDestroy
- c: onPause
- A: onNewIntent onRestart onStart onResume
- C: onStop onDestroy
3.4 栈内有AB其中B是SingTop 跳转B
- B: onPause->onNewIntent->onResume
二、 Fragment 生命周期
Fragment生命周期受宿主Activity的生命周期影响,一般分为两种
- 静态加载 (xml加载fragment)
- 动态加载 代码中加载
1.生命周期:
onAttach onCreate onCreateView onActivityCreated onStart onResume onPause onStop onDestroyView onDestroy onDetach
共计 11个
2.生命周期多了几个方法
- onAttach() 在Fragment 和 Activity 建立关联是调用(Activity 传递到此方法内)
- onCreateView() 当Fragment 创建视图时调用
- onActivityCreated() 在相关联的 Activity 的 onCreate() 方法已返回时调用。
- onDestroyView() 当Fragment中的视图被移除时调用
- onDetach() 当Fragment 和 Activity 取消关联时调用。
3.静态加载Fragment与Activity生命周期
3.1 打开界面
- F: onAttach -> onCreate-> onCreateView
- A: onCreate
- F: onActivityCreated
- A: onStart
- F: onStart
- A: onResume
- F: onResume
3.2 按下主屏界面
- F: onPause
- A: onPause
- F: onStop
- A: onStop
3.3 重新打开界面
- A: onRestart -> onStart
- F: onStart
- A: onResume
- F: onResume
3.4 按返回键
- F:onPause
- A: onPause
- F: onStop
- A: onStop
- F: onDestroyView ->onDestroy -> onDetach
- A: onDestroy
4.动态加载Fragment与Activity生命周期
只要当执行FragmentTransaction执行commit()后,fragment才会走正常的生命周期方法,先是执行一连串