[TOC] 1.Tasks and Back Stack 1.1. 當點擊Back按鈕返回到上一個Activity時發生了什麼? 後進 先出 原則 1.2. 點擊HOME按鈕 當點擊HOME按鈕的時候,原activity停止,但是整個activity依然完整,用戶返回這個task的時候,依然保持用戶 ...
目錄
1.Tasks and Back Stack
1.1. 當點擊Back按鈕返回到上一個Activity時發生了什麼?
後進-先出原則
1.2. 點擊HOME按鈕
當點擊HOME按鈕的時候,原activity停止,但是整個activity依然完整,用戶返回這個task的時候,依然保持用戶離開時的樣子
1.3.多次點擊進入Activity-Back按鈕
- Activtiy會被多次實例化--我們可以避免它
2.管理任務
- 一般情況下任務都遵循後進-先出的原則,無特殊情況不需要去更改它
- 但是有時候可能遇到下麵的情況:
- 希望在現Activity中啟動新的Task(從當前app跳到另外一個app)
- 不希望activity被多次實例化
- 明確back stack的activity
- 怎麼做?
- 在
AndroidManifest.xml
中的<activity>
添加屬性taskAffinity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch
- 在
startActivity()
之前的Intent
中添加參數FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
2.1. 定義啟動模式
定義新的Activity與當前的Task如何關聯
(1).method1: 在mainifest中聲明
- 在
屬性 | 模式 | 含義 |
`launchMode` | `standard(default)` | activity可以創建多次,每個task可以含有多個實例(A-B-C: A-B-C-C) |
`singleTop` | 當activity在top時,不會創建新實例(A-B-C: A-B-C)(A-B-C: A-B-C-B) | |
`singleTask` | 創建新的Task和實例化activity,但是如果activity之前已經存在,不會實例化 | |
`singleInstance` | 上同 |
### (2).method2: 在Intent flag中聲明
flas | 含義 | 與method1匹配 |
---|---|---|
FLAG_ACTIVITY_NEW_TASK | 在新的Task中開啟Activit,如果這個task已經存在,直接將他調用到前端 | singleTask |
FLAG_ACTIVITY_SINGLE_TOP | 如果在當前activity中再次開啟當前activity,直接調用onNewIntent()方法,不會創建新實例 | singleTop |
FLAG_ACTIVITY_CLEAR_TOP | 如果將要開啟的actiivty存在於當前task中,直接銷毀task中該activity之前的所有activity 然後調用onNewIntent()方法,不會創建新實例 |
---- |