- Android生命週期(Lifecycle)
- 因Activity摧毀,將參數恢復
- Activity之間導航
1. Android生命週期(Lifecycle)

onCreate()
在此階段還"未創建",相關聯組件會收到ON_CREATE事件,完成之後,會進入"已開始"狀態
onStart()
此階段進入"已開始",相關聯組件會收到ON_START事件,做進入前台的準備,通常用來做"初始化"維護介面,此回調時間非常短,結束會呼叫onResume
onResume()
此階段進入"已恢復",相關聯組件會收到ON_RESUME事件,來到前台,可執行可見的於前台需要的任何功能,如相機預覽畫面
發生中斷會呼叫onPause(),返回則再次回調
onPause()
此階段進入"已暫停",相關聯組件會收到ON_PAUSE事件,用戶離開Activity的第一個旗標,但不代表摧毀Activity
不應在此階段保存應用或用戶資訊,此階段操作因以簡單為主
高負載關閉操作應在onStop階段執行
onStop()
此階段進入"已停止",相關聯組件會收到ON_STOP事件,此時不可見
暫停動畫、粗略位置更新、資源釋放、保存資料,皆在此執行
此階段完成後,要馬返回互動onRestart(),要馬結束Activity onDestroy
onDestroy()
摧毀Activity前,會先執行此,相關聯組件會收到ON_DESTROY事件,調用此的原因有兩個
- Activity即將結束
- 配置變更(如設備翻轉、多視窗模式),暫時摧毀Activity
可以使用isFinishing()來區分上面兩種狀況
在此要釋放在onStop未釋放的所有資源
onRestoreInstanceState
This method is called between onStart() and onPostCreate(Bundle). This method is called only when recreating an activity; the method isn’t invoked if onStart() is called for any other reason.
以上來自Android官網
重建Activity時,在onStart()與onPostCreate(Bundle)之間
onCreate -> onStart -> onRestoreInstanceState -> onPostCreate(一般不去實現,參考這裡)
因此恢復資料可以選擇在onCreate或onRestoreInstanceState其中一個做恢復
onSaveInstanceState
If called, this method will occur after onStop() for applications targeting platforms starting with Build.VERSION_CODES.P. For applications targeting earlier platform versions this method will occur before onStop() and there are no guarantees about whether it will occur before or after onPause().
以上來自Android官網
以Build.VERSION_CODES.P(28, Android 9.0)為分界
Build.VERSION_CODES.P版本之後(包含此版本)皆發生在onStop之後
Build.VERSION_CODES.P版本之前,發生在onStop之前並不保證,無論它發生在onStop之前還是onPause之後
Lifecycle
上述相關聯組件會收到ON_CREATE事件等等,要如何在Class新增觀察,參考Android 新增Lifecycle觀察
2. 因Activity摧毀,將參數恢復
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) if(savedInstanceState != null) { flagState = savedInstanceState.getBoolean(FALSE_BOOLEAN_KEY) } println("A onCreate") } override fun onStart() { super.onStart() println("A onStart") } override fun onRestoreInstanceState(savedInstanceState: Bundle) { super.onRestoreInstanceState(savedInstanceState) flagState = savedInstanceState.getBoolean(FALSE_BOOLEAN_KEY) println("A onRestoreInstanceState") } //Activity可能臨時會被摧毀,在此保存資料 override fun onSaveInstanceState(outState: Bundle) { outState.putBoolean(FALSE_BOOLEAN_KEY, flagState) super.onSaveInstanceState(outState) println("A onSaveInstanceState") }
3. Activity之間導航
1個Activity啟動另一個Activity
不需返回結果,直接調用startActivity(),以下是呼叫另一個Activity方法
val intent = Intent(this, SignInActivity::class.java) startActivity(intent)
startActivity()的其他用法,參考Android startActivity其他用法
結束時希望返回結果,以前是調用startActivityForResult() ,此方法已被Google棄用
取得代之的是ActivityResultContract,使用方法參考Android startActivityForResult棄用?
相關文章
Android 新增Lifecycle觀察 | Android startActivity其他用法 |
Android startActivityForResult棄用? | Android Launch modes使用分析整理 |