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();