为什么来写这个呢?因为我在面试时发现自己忘光光QQ
Activity lifecycle
tags: Android
activity
lifecycle
activity
doc
onCreate
一定要在此做 setContentView()
和 viewModel 关联,并为类别内的变数做出实体
会接受 savedInstanceState 作为 function 传入参数,可在此读取保存的状态
onStart
对用户可见,ui 以绘製完成,但无法响应用户操作,为互动响应做準备
onResume
和用户响应,是大多核心功能会执行的生命週期
当现在的 activity 转移焦点时,ex. 出现 dialog ,生命週期会到 onPause , 因此如果有东西在 onPause 销毁掉,建议也要实现 onResume 来让资源重新载入到用户互动的生命週期里面
在多萤幕状态中,只有一个 activity 会获得 focus,其他的都会到 onPause 的阶段 ; 而同样让 focus 远离的行为包含来电、切换到另一个 activity
onPause
在此生命週期的 Activity 仍可以更新,像是 google map 的导航,就可以让手机一边和其他应用程式互动,一边显示导航即时更新
对于用户叫出 recent application 功能,或是按下返回键,都会经过此週期
:::info
不应在此储存状态数据或 io ,因为任务可能会无法完成,变到下一阶段
:::
onStop
已不可见,应在此释放资源,例如暂停动画、gps 从精确改为大略,并做 io 操作和保存 ui 状态
onRestart
已停止的 activity 重启时,接到 onStart
onDestory
用户关闭或是 os 关闭,在 configurationChange 会经过
应释放 onStop 没释放的所有资源
onSaveInstanceState
主动关闭不触发,os 杀掉、旋转会触发,不同的是,会主动将有 id 的 view 状态记录下来
custom view 的状态保存
onRestoreInstanceState
也能够过在此拿到 saveInstanceState 的 bundle ,且因这此有在 bundle 不为 null 的时候呼叫,所以无需检查,而这个会在 onStart 之后调用
configurationChange
旋转、切换语言
onPause -> onStop ->onDestory -> onCreate -> onStart -> onResume
整个走一遍
pause
dialog, 多萤幕工作
onPause -> onResume
暂时离开应用
从 recent application 离开,透过 home 键回到主页
onPause -> onStop ->(onReStart 看是否是新实体 ->) onstart -> onResume
activity返回主萤幕会发生什么事?
一是透过返回键,关闭应用到主页,用户主动关闭
onPause -> onStop -> onDestory