tags: APP
Android
Common 前言
- 剛開始寫 APP 的時候,可能不清楚 Activity 有所謂的 launch mode
- 而 launch mode 預設又是
standard
,所以造成每次按返回鍵,都要按好多好多次 - 規劃良好的 Activity 順序:必須有正確的 Intent 使用,還要搭配 Activity 的 launch mode
修改 Launch Mode
- 開啟 AndroidManifests.xml
- 找到要修改 Launch Mode 的 Activity,並加入 launchMode
<application>
...
<activity
android:name=".MainActivity"
android:launchMode="singleTask"/>
...
</application>
standard (預設)
- 每一次 startActivity 都是新的實體
- 同一個 Activity 可以 create 很多次,也就是允許相同的 Activity 堆疊
- Example:大部分的 Activity
singleTop
- 若 startActivity 的對象在 Top 時,不產生新的實體
- 如果 Activity 的執行實體已經出現在目前 Task 的頂端,系統會導引至該執行實體
- 注意:User 無法按下 [返回] 按鈕回到之前的 Activity 狀態
- 如果 Activity 的執行實體已經存在,但不在目前 Task 的頂端,此 Activity 仍然會 create 一個新的實體
- Example:在通知欄點擊收到的通知,然後需要啟動一個 Activity
singleTask
- 該 Activity 存在於主 Task 中但是唯一實體
- 如果此 Activity 的執行實體已經出現在 Task 中,系統會導引至現有的執行實體,並將在此 Activity 之上的所有 Activities 全部清除
- 如果此 Activity 尚未 create 在 Task 中,系統會直接創建一個新的 Task,並將此 Activity 放在新 Task 的頂端,之前的其他 Activities 會保留在下方
- Example:大多數 App 的主頁
singleInstance (少用)
- 該 Activity 會存於在和主 Task 不同的 Task 中且唯一
- 整個手機操作系統裡面只有一個實例存在。
- 不同的 Application 去使用這個 Activity 時,會共享同一個 Activity
- Activity 會運行在自己單獨的 Task 中,且 Task 中只有此 Activity 一個實例存在
- Example:呼叫來電界面
補充說明
- 設定 New 為
singleInstance
- 啟動過程:Main -> New -> Next
- 返回過程:Next -> Main -> New
- 說明:
- NextActivity 和 MainActivity 處於同一個 Task
- 當我們返回時,NextActivity 被清出 Task
- 此時 Task A 中還存在 MainActivity , 並且處於 Task 頂端,所以會看到MainActivity
- 當MainActivity執行返回時, Task A 會清空,然後我們就看到了位於 Task B 的NewActivity。
- 之後NewActivity出棧, Task B 也為空時,App退出。
Reference 參考資料
- Activity 圖示
http://mropengate.blogspot.tw/2015/12/android-ch5-android-activityintentfragm.html - Activity android:launchMode
http://ascii-iicsa.blogspot.tw/2011/07/activity-androidlaunchmode.html - Understand Activity Launch Mode With Examples
https://medium.com/@ankit.sinhal/understand-activity-launch-mode-with-examples-721e85b6421e - ANDROID-ACTIVITY 生命流程&啟動模式
https://rayzhangweb.wordpress.com/2017/04/04/android-activity-生命流程啟動模式/ - Tasks and Back Stack 官方文件
https://developer.android.com/guide/components/activities/tasks-and-back-stack.html - Activity启动模式(launchMode)详解
https://www.jianshu.com/p/103ab3830bc1
沒有留言:
張貼留言