<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 1.2 Activity的啟動模式 在默認情況下,當我們多次啟動同一個Activity 的時候,系統會創建多個實例并把官們一一放入任務棧中, 當我們單擊back 鍵,會發現這些Activity 會一一回退。任務棧是一種“后進先出”的棧結構,這個比較好理解,每按一下back 鍵就會有一個Activity 出棧,直到棧空為止,當棧中無任何Activity的時候,系統就會回收這個任務棧。 目前有四種啟動模式: standard 、singleTop 、singleTask 和singlelnstance 關于任務棧的詳細描述,可參考這里[Android中關于任務棧的總結](http://www.hmoore.net/alex_wsc/android/433739) #### 1.2.1 Activity的LaunchMode 1. standard:標準模式 每次啟動都會重新創建一個實例,不管這個Activity在棧中是否已經存在。誰啟動了這個Activity,那么Activity就運行在啟動它的那個Activity所在的棧中。 用Application去啟動Activity時會報錯,原因是非Activity類型的Context沒有任務棧。解決辦法是為待啟動Activity制定FLAG_ACTIVITY_NEW_TASH標志位,這樣就會為它創建一個新的任務棧。 2. singleTop:棧頂復用模式 如果新Activity位于任務棧的棧頂,那么此Activity不會被重新創建,同時回調 onNewIntent 方法。onCreate和onStart方法不會被執行。 如果新的Activity實例已經存在,但是不位于棧頂,則新Activity仍然會被重新創建。 3. singleTask:棧內復用模式 這是一種單實例模式。只要activity在一個棧中存在,則多次啟動此Activity都不會重新創建實例;具體而言,當一個具有singleTask模式的Activity請求啟動后,比如Activity A,系統會首先尋找是否存在A想要的任務棧,如果不存在activity所需要的任務棧,則創建一個新任務棧和新Activity實例;如果存在所需要的任務棧,不存在實例,則新創建一個Activity實例,并把它壓入棧中;如果存在所需要的任務棧和實例,則不創建,調用onNewIntent方法,同時使該Activity實例之上的所有Activity出棧。 4. singleIntance 單實例模式。具有singleTask模式的所有特性,同時具有此模式的Activity只能獨自位于一個任務棧中。換句話說,比如Activity A 是singlelnstance 模式, 當A 啟動后,系統會為它創 建一個新的任務棧,然后A 獨自在這個新的任務棧中,由于棧內復用的特性,后續的請求 均不會創建新的Activity,除非這個獨特的任務錢被系統銷毀了。 **什么是Activity 所需要的任務棧呢?** 在singleTask 啟動模式中,多次提到某個Activity所需的任務棧,什么是Activity 所需要的任務棧呢?這要從一個參數說起: TaskAffInity,可以翻譯為任務相關性。這個參數標識了一個Activity所需要的任務棧的名字,默認情況下,所有Activity所需的任務棧的名字為應用的包名。當然,我們可以為每個Activity 都單獨指定TaskAffinity屬性,這個屬性值必須不能和包名相同,否則就相當于沒有指定。TaskAffinity 屬性主要和singleTask 啟動模式或者allowTaskReparenting 屬性配對使用,在其他情況下沒有意義。另外,任務棧分為前臺任務棧和后臺任務棧,后臺任務棧中的Activity位于暫停狀態,用戶可以通過切換將后臺任務棧再次調到前臺。 **設置啟動模式** 1. manifest中 設置下的 android:launchMode 屬性。 2. 啟動Activity的 `intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);` 。 兩種同時存在時,第二種的優先級高于第一種,以第二種為準。其次,在限定范圍上有所不同,第一種方式無法直接為Activity添加FLAG_ACTIVITY_CLEAR_TOP標識,第二種方式無法指定singleInstance模式。 可以通過命令行 adb shell dumpsys activity 命令查看棧中的Activity信息。 #### 1.2.2 Activity的Flags 這些FLAG可以設定啟動模式、可以影響Activity的運行狀態。 * FLAG_ACTIVITY_NEW_TASK 為Activity指定“singleTask”啟動模式。 * FLAG_ACTIVITY_SINGLE_TOP 為Activity指定“singleTop"啟動模式。 * FLAG_ACTIVITY_CLEAR_TOP 具有此標記位的Activity啟動時,同一個任務棧中位于它上面的Activity都要出棧,一般和FLAG_ACTIVITY_NEW_TASK配合使用。 * FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 如果設置,新的Activity不會在最近啟動的Activity的列表(就是安卓手機里顯示最近打開的Activity那個系統級的UI)中保存。等同于在xml中指定android:exludeFromRecents="true"屬性。 >[info] 注意:Flags并不能簡單地等同于啟動模式
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看