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方法

