一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

當前滾動:安卓怎么開啟啟動模式?Android四種啟動模式

來源:CSDN 時間:2022-12-19 10:23:54

標準模式(Standard)


(相關資料圖)

標準模式(Standard),這也是系統默認模式,每次啟動一個activity都會重新創建一個新的實例,不關這個實例是否存在; ApplicationContext去啟動standard模式的Activity的時候就會報錯:

android.util.androidruntiomException: Calling startActivity from outside of an Activity context requires the FLAG_ACTIVITY_TASK flag . Is this really what are want?

因為我們的standard模式的Activity默認會進入啟動它的Activity所屬的任務棧中,但是由于非Activity類型的Context(如ApplicationContext)并沒有所謂的任務棧,所以這就有問題了,解決這個問題,就是待啟動Activity指定FLAG_ACTIVITY_TASK標記位,這樣啟動的時候就會為他創建一個新的任務棧,這個時候待啟動Activity實際上是以singleTask模式啟動的。

棧頂復用模式(SingleTop)

棧頂復用模式(SingleTop),棧頂復用模式,在這個模式下,如果新的Activity已經位于任務棧的棧頂,那么此Activity不會被重新創建,同時他的onNewIntent方法會被調用,通過此方法的參數我們可以取出當前請求的信息

棧內復用模式(SingleTask)

棧內復用模式(SingleTask)棧內復用模式,這是一種單實例模式,在這種模式下,只要Activity在一個棧內存在,那么多次啟動此Activity都不會創建實例,和singTop一樣,系統也會回調其onNewIntent方法;

TaskAffinity,可以翻譯成任務相關性,這個參數標示了一個Activity所需要的任務棧的名字默認情況下,所有的Activity所需要的任務棧的名字為應用的包名,可以為每個Activity都單獨指定TaskAffinity,這個屬性值必須必須不能和包名相同,否則就相當于沒有指定,TaskAffinity屬性主要和singleTask啟動模式或者allowTaskReparenting屬性配合使用,在其他狀況下沒有意義,另外,任務棧分為前臺任務棧和后臺任務棧,后臺任務棧中的Activity位于暫停狀態,用戶可以通過切換將后臺任務棧再次調為前臺

當TaskAffinity和singleTask啟動模式配對使用的時候,他是具有該模式Activity目前任務棧的名字,待啟動的Activity會運行在名字和TaskAffinity相同的任務棧中

當TaskAffinity和allowTaskReparentiing結合的時候,當一個應用A啟動了應用B的某一個Activity后,如果這個Activity會直接從應用A的任務棧轉移到應用B的任務棧中,這還是很抽象的,再具體點,比如現在有2個應用A和B,A啟動了B的一個Activity C ,然后按Home鍵回到桌面,然后再單擊B的桌面圖標,這個時候并不是啟動; B的主Activity,而是重新顯示了已經被應用A啟動的Activity C,或者說,C從A的任務棧轉移到了B的任務棧中,可以這么理解,由于A啟動了C,這個時候C只能運行在A的任務棧中,但是C屬于B應用,正常情況下,他的TaskAffinity值肯定不可能和A的任務棧相同(因為包名不同),所以,當B啟動后,B會創建自己的任務棧,這個時候系統發現C原本所想要的任務棧已經被創建出來了,所以就把C從A的任務棧中轉移過來

單實例模式(SingleInstance)

單例模式(SingleInstance),這是一種加強的singleTask的模式,他除了具有singleTask的所有屬性之外,還加強了一點,那就是具有此模式下的Activity只能單獨的處于一個任務棧中,換句話說,比如Activity A是singleInstance模式,當A啟動的時候,系統會為創建創建一個新的任務棧,然后A獨立在這個任務棧中,由于棧內復用的特性,后續的請求均不會創建新的Activity,除非這個獨特的任務棧被系統銷毀了

兩種設置啟動模式的方法

第一種

第二種

Intent intent = new Intent(); intent.setClass(this,SecondActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);

兩種都可以設置activity的啟動模式 ,第二種優先級更高,同時存在時以第二種為準,兩種方式限定范圍有所不同,第一種方式無法直接為Activity設置FLAG_ACTIVITY_CLEAR_TOP標識,而第二種方式無法指定singleInstance模式

責任編輯:

標簽: 這個時候

相關推薦:

精彩放送:

新聞聚焦
Top 主站蜘蛛池模板: 彰化县| 南阳市| 体育| 宜宾市| 和龙市| 商南县| 内黄县| 金坛市| 湖北省| 会泽县| 囊谦县| 开化县| 莎车县| 大厂| 江西省| 吉林市| 炉霍县| 泊头市| 高台县| 桐柏县| 宜兰市| 永胜县| 怀远县| 琼中| 常山县| 灵武市| 合山市| 南投市| 博湖县| 丽江市| 武功县| 余干县| 西藏| 蓬莱市| 友谊县| 博乐市| 巩义市| 房产| 庆安县| 崇信县| 永仁县|