Activity的生命周期?
onCreate() -> onStart() -> onResume -> onPause() -> onStop() -> onDestory
- onCreate():当Activity第一次创建的时候调用此方法,一般在此方法中进行控件的声明,添加事件等初始化工作
- onRestart():表示Activity正在重新启动,一般情况下,当前Activity从不可见重新变成可见状态时,onRestart()就会被调用,这种情形一般是用户行为所导致的,比如用户按HOME键切换到桌面然后重新打开APP或者按back键
- onStart():当Activity被显示到屏幕上的时候调用此方法
- onResume():当此Activity能够被操作之前,也就是能够获得用户的焦点之前调用此方法
- onRestart():当Activity被停止后又被再次启动之前调用此方法,接着将调用onStart()方法
- onPause():当第一个Activity通过Intent启动第二个Activity的时候,将调用第一个Activity的onPause()方法,然后调用第二个Activity的onCreate(),onStart(),onResume()方法,接着调用第一个Activity的onStop()方法,如果Activity重新获得焦点,则将调用onResume()方法,如果此Activity进入用户不可见状态,那么将调用onStop()方法
- onStop():当第一个Activiy被第二个Activity完全覆盖,或者被销毁的时候回调用此方法,如果此Activity还会与用户进行交互,将调用onRestart()方法,如果此Activity将被销毁,那么将调用onDestory()方法
- onDestroy():Activity被销毁之前调用此方法,或者调用finish()方法结束Activity的时候调用此方法,可以在此方法中进行收尾工作,比如释放资源等
Activity生命周期在开发过程中的调用时机?
- 进入用户可视状态:onCreate -> onStart -> onResume
- 被其他Activity覆盖或者锁屏状态下:onPause,恢复:onResume
- 跳转到其他Activity或者按下Home键:onPause -> onStop,恢复后:onRestart -> onStart -> onResume
- 退出当前Activity:onPause -> onStop -> onDestory
- 从Activity是否可见来说,onStart()和onStop()是配对的,从Activity是否在前台来说,onResume()和 onPause() 是配对的
- 横竖屏切换的生命周期:onDestory() -> onCreate() -> onStart() -> onResume()
- 当活动启动另一个活动的时候,应该考虑被启动的活动的可见性 当Activity B 覆盖 A导致A完全不可见时:两个活动的生命周期变化为:
部署程序:
D/MainActivity: onCreate----------A
D/MainActivity: onStart-----------A
D/MainActivity: onResume----------A
点击按钮A跳转到B
D/MainActivity: onPause-----------A
D/SecondActivity: onCreate--------B
D/SecondActivity: onStart---------B
D/SecondActivity: onResume--------B
D/MainActivity: onStop------------A
点击返回键从B返回A
D/SecondActivity: onPause---------B
D/MainActivity: onReStart---------A
onStart-----------A
D/MainActivity: onResume----------A
D/SecondActivity: onStop----------B
D/SecondActivity: onDestory-------B
当Activity B背景被设置为透明(相当于发生跳转后,A部分可见):它们的生命周期变化为:
部署程序:
D/MainActivity:onCreate----------A
D/MainActivity: onStart-----------A
D/MainActivity: onResume----------A
点击A中的按钮开始跳转到B
D/MainActivity: onPause-----------A
D/SecondActivity: onCreate--------B
D/SecondActivity: onStart---------B
D/SecondActivity: onResume--------B
然后点击返回键从B到A
D/SecondActivity: onPause---------B
D/MainActivity: onResume----------A
D/SecondActivity:onStop----------B
D/SecondActivity: onDestory-------B
Fragment的生命周期?
onAttach() -> onCreate() -> onCreateView() -> onActivitycreated() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestoryView() -> onDestory() -> onDetach()
- onAttach():当Fragment被加入Activity时调用,可以获得Activity传递的值
- onCreate():实例化成员变量
- onCreateView():给当前Fragment绘制UI布局,可以使用线程更新UI
- onActivityCreated():表示Activity执行onCreate()方法完成时调用
- onStart():开始
- onResume():获得焦点
- onPause():暂停
- onStop():停止
- onDestoryView():表示Fragment销毁相关联的布局
- onDestory():销毁Fragment对象
- onDetach():脱离Activity
一旦Activity进入resumed状态(也就是running状态),你就可以自由地添加和删除Fragment了,因此,只有当Activity在resumed状态时,Fragement的生命周期才能独立的运转,其他时候是依赖于Activity的生命周期变化的
Fragment生命周期在开发过程中的调用时机?
- 当一个Fragment被创建时:onAttach() -> onCreate() -> onCreateView() -> onActicityCreated()
- 当这个Fragment对用户可见时:onStart() -> onResume()
- 当这个Fragment进入后台模式的时候:onPause() -> onStop()
- 当一个Fragment被销毁(或持有它的Activity被销毁)时 onPause() --> onStop() -> onDesoryView() -> onDestory() -> onDetach()
Service的生命周期?
onCreate() -> onStartCommand() -> onBind() -> onUnbind() -> onDestory()
- onCreate():初始化,第一次startService时调用
- onStartCommand():启动
- onBind():绑定
- onUnbind():解绑
- onDestory():销毁
在Service每一次的开启关闭过程中,只有onStartCommand()可被多次调用(通过多次startService调用),其他onCreate(),onBind(),onUnbind(),onDestory()在一个生命周期中只能被调用一次
对于startService服务:onCreate() -> onstartCommand() ,如果context.stopService() -> onDestory()
对于bindService服务:onCreate() -> onBind(),如果Activity被销毁 -> onUnbind() -> o()