Activity与Fragment的生命周期

Activtiy和Fragment不同情况下的生命周期

Activity一般情况下生命周期:


Activity7个生命周期方法

onCreate()  当前Activity被创建的时候调用

onStart()  当前Activity可见的时候被调用

onResume()  当前Activity获取焦点的时候被调用

onPause()  当前Activity失去焦点的时候被调用

onStop()    当前Activity不可见的时候被调用

onDestory() 当前Activity被销毁的时候被调用

onRestart() 当前Activity被重启的时候被调用

可见状态: onCreate()----onStart()--->onResume()

不可见状态分为两种情况:

点击Home键:onPause()-->onStop() ------->当前Activity退到后台之后,activity的进程还在 ,这个时候属于后台进程 ,这个时候属于后台进程如果再次进来APP  onRestart()---->onStart()---->onResume();这个时候的进程就属于可见进程

点击返回键:onPause()-->onStop()---->onDestory()----->activity的进程不在,当前进程就属于空进程,系统内存不足的时候就会先回收它,如果再次进来APP onCreate()----onStart()---->onResume()

特殊情况下生命周期:

AActivtiy--->跳转到--->BAcitvity:

Activity会执行onPause()------>BActivity(onCreate()----->onStart()---->onResume())---->Activtiy(onStop())

如果点击返回键,这个时候 BActivity (onPause())----->A(onStart()-----onResume())---B(onStop()---->onDestory())

保存数据

一般保存数据的操作要放在onPause()里面,但是不要在onPause()方法里面执行耗时操作,因为onPause()操作执行不完无法跳转到BActivtiy,所以Activity在跳转的时候出现卡顿下次进来可以在onStart()方法里面获取数据

弹出一个对话框或者popwindow对其生命周期没有影响


如果BActivtiy是dialog的话

A:onCreate------onStart------onResume------onPause

B:onCreate------onStart------onResume

锁屏Activity的生命周期

A:onPause-------onStop

B:onStart--------onResume

Activity横竖屏切换生命周期方法

onCreate------onStart------onResume

横屏的时候:onPause------onStop-------onDestory------onCreate------onStart---------onResume

出现问题:原先的Activtiy被销毁,然后重新创建一个新的Activtiy

解决办法:1.在清单文件中activity节点下配置 android:configChanges="keyboardHidden|orientation|screenSize"

          2.重写Ac'ti'v'ti'y中的onSaveInstanceState和onRestoreInstanceState方法

    在onSaveInstanceState()保存数据状态,在onCreate()或者onRestoreInstanceState()中恢复数据状态

Activity:启动模式状态下的生命周期

Activity四种启动模式

1.standard     2.singleTask  3.singleTop   4.singleInstance

第一种情况  栈内复用

A:SingleTask

B:Standard

A------B------->清空任务栈中A上面的所有Activity,然后复用A,正常情况下的生命周期方法:(B:onPause--->A:onNewIntent()---A:onStart--->A:Resume()---->B:onStop---->B:onDestory());

第二种情况:栈顶复用

A:singleTop

B:standard

A-------->A(复用原先栈顶的A)

A:onPause()----->onNewIntent()----->onResume()

Fragment的生命周期

onAttach()------onCreate()-----onCreateView()----onActivityCreated()---onStart()----onResume()----onPause()---onStop()----onDestoryView()------>onDestory()---onDetach()

Replace()和add(),hide(),show()对生命周期的方法影响

replace:将原先的Fragment销毁取消挂载----->创建新的Fragment

add():onAttach()------onCreate()-----onCreateView()----onActivityCreated()---onStart()----onResume()

hide(),show():对生命周期没有影响,但是对Fragment中的onHiddenChanged()有影响.

Fragment中和setUserVisiableHint()方法的作用:

当Fragment hide(),show():调用的时候才会执行onHiddenChanged

当Fragment ViewPager+Fragment的时候才会执行setUserVisiableHint();

你可能感兴趣的:(Activity与Fragment的生命周期)