在Android中,Activity的啟動(dòng)流程大致如下:
- 調(diào)用startActivity(intent)方法或者startActivityForResult(intent, requestCode)方法來(lái)請(qǐng)求啟動(dòng)目標(biāo)Activity。
- 系統(tǒng)會(huì)檢查目標(biāo)Activity是否存在,以及當(dāng)前應(yīng)用是否具有訪問(wèn)目標(biāo)Activity的權(quán)限。
- 如果目標(biāo)Activity存在并且有權(quán)限訪問(wèn),系統(tǒng)會(huì)為該Activity創(chuàng)建一個(gè)新的實(shí)例,并將其添加到Activity棧中。
- 系統(tǒng)會(huì)調(diào)用目標(biāo)Activity的onCreate()方法來(lái)進(jìn)行初始化,這個(gè)方法會(huì)在Activity第一次被創(chuàng)建時(shí)調(diào)用。
- 目標(biāo)Activity的onCreate()方法完成后,系統(tǒng)會(huì)調(diào)用onStart()方法,表示Activity正在被啟動(dòng)。
- 然后,系統(tǒng)會(huì)調(diào)用onResume()方法,表示Activity已經(jīng)可見(jiàn)并且可以與用戶(hù)進(jìn)行交互。
- 如果啟動(dòng)的是另一個(gè)Activity并且需要返回結(jié)果,那么當(dāng)前Activity將會(huì)進(jìn)入onPause()狀態(tài),等待返回結(jié)果。
- 當(dāng)目標(biāo)Activity完成其任務(wù)后,會(huì)調(diào)用setResult(resultCode, data)方法將結(jié)果返回給調(diào)用的Activity。
- 返回結(jié)果后,目標(biāo)Activity會(huì)調(diào)用finish()方法來(lái)銷(xiāo)毀自身,并將結(jié)果返回給調(diào)用的Activity。
- 調(diào)用的Activity會(huì)重新進(jìn)入onResume()狀態(tài),并通過(guò)onActivityResult()方法獲取返回的結(jié)果。
- 如果啟動(dòng)的是另一個(gè)Activity并且不需要返回結(jié)果,那么當(dāng)前Activity將會(huì)進(jìn)入onStop()狀態(tài),等待用戶(hù)再次回到該Activity。
- 當(dāng)用戶(hù)回退到該Activity時(shí),系統(tǒng)會(huì)調(diào)用onRestart()方法重新啟動(dòng)該Activity。
- 然后,系統(tǒng)會(huì)調(diào)用onStart()方法和onResume()方法,使Activity重新進(jìn)入可見(jiàn)并且可交互的狀態(tài)。