Android Activity啟動模式

Activity啟動模式:

1.standard 標準模式

2.singleTop?

3.singleTask

4.singInstance


首先明確一個概念是任務(wù)棧

activity是存在任務(wù)棧棧這個容器里面的,棧遵循先進后出原則


TaskAffinity 是設(shè)置任務(wù)棧的屬性,默認包名


standard 是最普通最常見的模式,在manifest是默認聲明的,常用場景是跳頁

Intent intent = new Intent("xxxx")

startActivity(intent)



singleTop (棧頂復用模式)

以singleTop啟動activity時,分兩種情況,第一種是任務(wù)棧的頂部activity不是該activity類型實例,則于standrar模式一樣新建一個activity并入棧,假若任務(wù)棧頂部是該activity實例則通過onNewIntent接受intent傳輸?shù)臄?shù)據(jù),并不會走onCreate.

主要場景:用去去掉重復點擊造成的生成同樣兩個的activity

singleTask?(棧內(nèi)復用模式)

以singleTask啟動activity時,分兩種情況,第一種是任務(wù)棧內(nèi)沒有該activity的實例時,新建一個activity直接入棧,第二種是加入activity實例時發(fā)現(xiàn)有該類型的activity存在于任務(wù)棧內(nèi)則不新建activity,復用棧內(nèi)的該類型activity,并清除在這個任務(wù)棧的該activity以上的activity,與singleTop類似并不會走oncreate 而是通過onNewIntent接受數(shù)據(jù)

主要場景:用于應(yīng)用內(nèi)的mainactivity,不需要重復該acitivty實例

singleInstance

單一實例模式,整個手機操作系統(tǒng)里面只有一個實例存在。不同的應(yīng)用去打開這個activity 共享公用的同一個activity。他會運行在自己單獨,獨立的任務(wù)棧里面,并且任務(wù)棧里面只有他一個實例存在。應(yīng)用場景:呼叫來電界面。這種模式的使用情況比較罕見,在Launcher中可能使用?;蛘吣愦_定你需要使Activity只有一個實例。?



onNewIntent

當activity的啟動模式為singleTop singleTask singleInstance,而且startActivity時候沒有走onCreate時意味著任務(wù)棧已經(jīng)擁有g(shù)該activity實例 則回調(diào)onNewIntent.

可以通過onNewIntent 傳輸intent數(shù)據(jù)



onConfigurationChanged


該方法的回調(diào)時機是activity的設(shè)備信息發(fā)生變化的時候 例如屏幕橫豎的變化

但是該方法回調(diào)是需要條件的 如果沒在menifest文件設(shè)置權(quán)限 以及在activity上設(shè)置configchanes對應(yīng)的屬性 例如screensize

orientation 則該方法不會回調(diào),,而且 activity會在設(shè)備信息改變時銷毀自身并且重新走onCreate方法


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容