站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
程式Android 安卓

【APP/Android】Activity 的啟動模式 launch mode (整理)

tags: APP Android

Common 前言

  1. 剛開始寫 APP 的時候,可能不清楚 Activity 有所謂的 launch mode
  2. 而 launch mode 預設又是 standard,所以造成每次按返回鍵,都要按好多好多次
  3. 規劃良好的 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
  • 說明:
    1. NextActivity 和 MainActivity 處於同一個 Task
    2. 當我們返回時,NextActivity 被清出 Task
    3. 此時 Task A 中還存在 MainActivity , 並且處於 Task 頂端,所以會看到MainActivity
    4. 當MainActivity執行返回時, Task A 會清空,然後我們就看到了位於 Task B 的NewActivity。
    5. 之後NewActivity出棧, Task B 也為空時,App退出。

Reference 參考資料

  1. Activity 圖示
    http://mropengate.blogspot.tw/2015/12/android-ch5-android-activityintentfragm.html
  2. Activity android:launchMode
    http://ascii-iicsa.blogspot.tw/2011/07/activity-androidlaunchmode.html
  3. Understand Activity Launch Mode With Examples
    https://medium.com/@ankit.sinhal/understand-activity-launch-mode-with-examples-721e85b6421e
  4. ANDROID-ACTIVITY 生命流程&啟動模式
    https://rayzhangweb.wordpress.com/2017/04/04/android-activity-生命流程啟動模式/
  5. Tasks and Back Stack 官方文件
    https://developer.android.com/guide/components/activities/tasks-and-back-stack.html
  6. Activity启动模式(launchMode)详解
    https://www.jianshu.com/p/103ab3830bc1

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽