一、Activity的啟動模式有哪幾種?
- standard (標準模式)
- singleTop(單一頂部模式)
- singleTask (單一任務模式)
- singleInstance (單一實例模式)
二、standard
- 該模式是系統默認的模式;
- 應用程序啟動時,系統會創建一個任務棧,每次啟動一個Activity,系統都會將該Activity壓入任務棧中。
三、singleTop
- 該模式為單一頂部模式,啟動該模式下的Activity時,如果系統發現任務棧的棧頂是同一個Activity時,系統將不會創建該Activity實例,而是會調用該Activity的onNewIntent()的方法;
- 如果不是同一個Activity時,系統會創建該Activity實例,并壓入任務棧中。
四、singleTask
- 該模式為單一任務模式,啟動該模式下的Activity時,如果系統發現任務棧的棧中有該Activity的實例時,系統將不會創建該Activity,而是將以前創建的Activity調到前臺,并將以前Activity之上的Activity從任務棧中清除。
- 如果系統發現任務棧中沒有該Activity的實例時,系統會創建該Activity實例,并壓入任務棧中。
- 該模式下的任務棧中只能有該Activity一個實例對象,能有其它Activity實例對象。
五、singleInstance
- 該模式為單一實例模式,啟動該模式下的Activity時,系統會判斷該Activity是否已經啟動,如果未啟動,系統會先創建一個任務棧,再創建Activity實例,并將該Activity壓入創建的任務棧中。
- 如果已經啟動,則將該Activity以及該Activity所在的任務棧顯示到前臺。
- 該模式下的任務棧中只能有該Activity一個實例對象,并且不能有其它Activity的實例對象。
六、TaskAffinity屬性與allowTaskReparenting屬性
- 如果不設置TaskAffinity屬性,則Activity使用的默認屬性(應用的包名)
- TaskAffinity的作用是,明確Activity實例應該在哪個任務棧中。
- 同一個TaskAffinity屬性的Activity實例,會在同一個任務棧中。
- allowTaskReparenting