• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統(tǒng)計(jì)

            最新評(píng)論

            Task與Activity詳解 --- 轉(zhuǎn)

            1. Task是包含一系列Activity的堆棧, 遵循先進(jìn)后出原則. 

             

            2. Task默認(rèn)行為: 

             

                (1) 前提: Activity A和Activity B在同一個(gè)應(yīng)用中. 

             

                     操作: Activity A啟動(dòng)開(kāi)僻Task堆棧(堆棧狀態(tài): A), 在Activity A中啟動(dòng)Activity B(堆棧狀態(tài): AB), 按下BACK返回鍵(堆棧狀態(tài): A). 

             

                (2) 前提: Activity A和Activity B在同一個(gè)應(yīng)用中, 應(yīng)用名稱(chēng)為"TaskOne應(yīng)用".

             

                     操作: 在Launcher中單擊"TaskOne應(yīng)用"圖標(biāo), Activity A啟動(dòng)開(kāi)僻Task堆棧, 命名為T(mén)askA(TaskA堆棧狀態(tài): A),

                             在Activity A中啟動(dòng)Activity B(TaskA堆棧狀態(tài): AB), 長(zhǎng)按Home鍵, 返回Launcher, 啟動(dòng)其它應(yīng)用(如:電子書(shū)),

                             開(kāi)僻一個(gè)新Task堆棧, 命名: TaskB, 長(zhǎng)按Home健, 返回Launcher, 單擊"TaskOne應(yīng)用"圖標(biāo), 此時(shí)TaskA堆棧返回前臺(tái),

                             Activity B為棧頂應(yīng)用, 供用戶(hù)使用. 

             

                (3) 前提: Activity A在名稱(chēng)為"TaskOne應(yīng)用"的應(yīng)用中, Activity C在名稱(chēng)為"TaskTwo應(yīng)用"的應(yīng)用中.

             

                     操作: 在Launcher中單擊"TaskOne應(yīng)用"圖標(biāo), Activity A啟動(dòng)開(kāi)僻Task堆棧, 命名為T(mén)askA(TaskA堆棧狀態(tài): A),

                             在Activity A中啟動(dòng)Activity C(TaskA堆棧狀態(tài): AC),長(zhǎng)按Home鍵, 返回Launcher, 啟動(dòng)"TaskTwo應(yīng)用"即Activity C,

                             開(kāi)僻新的Task堆棧, 命名為T(mén)askB, 按BACK鍵返回Launcher, 單擊"TaskOne應(yīng)用"圖標(biāo), 此時(shí)TaskA堆棧返回前臺(tái),

                             Activity B為棧頂應(yīng)用, 供用戶(hù)使用. 

             

            3. Intent FLAG介紹:

             

                (1) FLAG_ACTIVITY_NEW_TASK: 

             

                     a. 前提: Activity A和Activity B在同一個(gè)應(yīng)用中. 

             

                         操作: Activity A啟動(dòng)開(kāi)僻Task堆棧(堆棧狀態(tài): A), 在Activity A中啟動(dòng)Activity B, 啟動(dòng)Activity B的Intent的Flag設(shè)為

                                 FLAG_ACTIVITY_NEW_TASK, Activity B被壓入Activity A所在堆棧(堆棧狀態(tài): AB).

             

                         原因: 默認(rèn)情況下同一個(gè)應(yīng)用中的所有Activity擁有相同的關(guān)系(taskAffinity).

             

                     b. 前提: Activity A在名稱(chēng)為"TaskOne應(yīng)用"的應(yīng)用中, Activity C和Activity D在名稱(chēng)為"TaskTwo應(yīng)用"的應(yīng)用中.

             

                         操作1: 在Launcher中單擊"TaskOne應(yīng)用"圖標(biāo), Activity A啟動(dòng)開(kāi)僻Task堆棧, 命名為T(mén)askA(TaskA堆棧狀態(tài): A),

                                   在Activity A中啟動(dòng)Activity C, 啟動(dòng)Activity C的Intent的Flag設(shè)為FLAG_ACTIVITY_NEW_TASK,

                                   Android系統(tǒng)會(huì)為Activity C開(kāi)僻一個(gè)新的Task, 命名為T(mén)askB(TaskB堆棧狀態(tài): C), 長(zhǎng)按Home鍵, 選擇TaskA,

                                   Activity A回到前臺(tái), 再次啟動(dòng)Activity C, 這時(shí)TaskB回到前臺(tái), Activity C顯示, 供用戶(hù)使用, 即:

                                   包含F(xiàn)LAG_ACTIVITY_NEW_TASK的Intent啟動(dòng)Activity的Task正在運(yùn)行, 則不會(huì)為該Activity創(chuàng)建新的Task,

                                   而是將原有的Task返回到前臺(tái)顯示.

             

                         操作2: 在Launcher中單擊"TaskOne應(yīng)用"圖標(biāo), Activity A啟動(dòng)開(kāi)僻Task堆棧, 命名為T(mén)askA(TaskA堆棧狀態(tài): A),

                                   在Activity A中啟動(dòng)Activity C,啟動(dòng)Activity C的Intent的Flag設(shè)為FLAG_ACTIVITY_NEW_TASK,

                                   Android系統(tǒng)會(huì)為Activity C開(kāi)僻一個(gè)新的Task, 命名為T(mén)askB(TaskB堆棧狀態(tài): C),  在Activity C中啟動(dòng)

                                   Activity D(TaskB的狀態(tài): CD) 長(zhǎng)按Home鍵, 選擇TaskA, Activity A回到前臺(tái), 再次啟動(dòng)Activity C,

                                   這時(shí)TaskB回到前臺(tái), Activity D顯示,供用戶(hù)使用.

             

                (2) FLAG_ACTIVITY_CLEAR_TOP:

             

                     前提: Activity A, Activity B, Activity C和Activity D在同一個(gè)應(yīng)用中.

             

                     操作: Activity A啟動(dòng)開(kāi)僻Task堆棧(堆棧狀態(tài): A), 在Activity A中啟動(dòng)Activity B(堆棧狀態(tài): AB), 在Activity B中啟動(dòng)

                             Activity C(堆棧狀態(tài): ABC), 在Activity C中啟動(dòng)Activity D(堆棧狀態(tài): ABCD), 在Activity D中啟動(dòng)Activity B,

                             啟動(dòng)Activity B的Intent的Flag設(shè)置為FLAG_ACTIVITY_CLEAR_TOP, (堆棧狀態(tài): AB).

             

                (3) FLAG_ACTIVITY_BROUGHT_TO_FRONT:

             

                     前提: Activity A在名稱(chēng)為"TaskOne應(yīng)用"的應(yīng)用中, Activity C和Activity D在名稱(chēng)為"TaskTwo應(yīng)用"的應(yīng)用中.

             

                     操作: 在Launcher中單擊"TaskOne應(yīng)用"圖標(biāo), Activity A啟動(dòng)開(kāi)僻Task堆棧, 命名為T(mén)askA(TaskA堆棧狀態(tài): A),

                             在Activity A中啟動(dòng)Activity C,啟動(dòng)Activity C的Intent的Flag設(shè)為FLAG_ACTIVITY_NEW_TASK,

                             Android系統(tǒng)會(huì)為Activity C開(kāi)僻一個(gè)新的Task, 命名為T(mén)askB(TaskB堆棧狀態(tài): C), 在Activity C中啟動(dòng)

                             Activity D(TaskB的堆棧狀態(tài): CD), 長(zhǎng)按Home鍵, 選擇TaskA, Activity A回到前臺(tái), 在Activity A中再次啟動(dòng)Activity C,

                             在啟動(dòng)Activity C的Intent中設(shè)置Flag為FLAG_ACTIVITY_BROUGHT_TO_FRONT, TaskB回到前臺(tái),

                             Activity C顯示, (TaskB的堆棧狀態(tài): C).

             

                (4) FLAG_ACTIVITY_MULTIPLE_TASK:

             

                     與FLAG_ACTIVITY_NEW_TASK結(jié)合使用, 首先在Intent中設(shè)置FLAG_ACTIVITY_NEW_TASK, 打開(kāi)Activity,

                     則啟動(dòng)一個(gè)新Task, 接著在Intent中設(shè)置FLAG_ACTIVITY_MULTIPLE_TASK, 再次打開(kāi)同一個(gè)Activity,則還會(huì)新啟動(dòng)一個(gè)Task.

             

                (5) FLAG_ACTIVITY_SINGLE_TOP:

             

                     當(dāng)前Task堆棧中存在ABCD四個(gè)Activity, A是棧頂Activity, D為棧底Activity, 存在打開(kāi)A的Intent中設(shè)置了

                     FLAG_ACTIVITY_SINGLE_TOP標(biāo)志, 則會(huì)使用棧頂A, 而不會(huì)從新New A.

             

                (6) FLAG_ACTIVITY_RESET_TASK_IF_NEEDED:

             

                     例: 存在Activity A, Activity B, Activity C, Activity A啟動(dòng)開(kāi)僻Task堆棧, 命名為T(mén)askA(TaskA堆棧狀態(tài): A),

                          在Activity A中啟動(dòng)Activity B(TaskA堆棧狀態(tài): AB), 接著Activity B啟動(dòng)Activity C(TaskA堆棧狀態(tài): ABC),

                          啟動(dòng)Activity C的Intent中設(shè)置FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET標(biāo)題, 這樣TaskA中有一個(gè)還原點(diǎn),

                          當(dāng)有包含F(xiàn)LAG_ACTIVITY_RESET_TASK_IF_NEEDED的Intent請(qǐng)求TaskA堆棧時(shí)(比如請(qǐng)求Activity A)

                          系統(tǒng)就會(huì)將還原點(diǎn)以上的Activity清除, TaskA堆棧中只剩下了AB.

             

            4. launchMode介紹:

             

                (1) standard: 

             

                     如果啟動(dòng)此Activity的Intent中沒(méi)有設(shè)置FLAG_ACTIVITY_NEW_TASK標(biāo)志, 則這個(gè)Activity與啟動(dòng)他的Activity在同一個(gè)Task中,

                     如果設(shè)置了Activity請(qǐng)參考上面FLAG_ACTIVITY_NEW_TASK的詳細(xì)說(shuō)明,"launchMode"設(shè)置為"standard"的

                     Activity可以被實(shí)例化多次, 可以在Task中的任何位置, 對(duì)于一個(gè)新的Intent請(qǐng)求就會(huì)實(shí)例化一次.

             

               (2) singleTop: 

             

                     如果啟動(dòng)此Activity的Intent中沒(méi)有設(shè)置FLAG_ACTIVITY_NEW_TASK標(biāo)志, 則這個(gè)Activity與啟動(dòng)他的Activity在同一個(gè)Task中,

                     如果設(shè)置了Activity請(qǐng)參考上面FLAG_ACTIVITY_NEW_TASK的詳細(xì)說(shuō)明,"launchMode"設(shè)置為"singleTop"的Activity可以被

                     實(shí)例化多次,  可以在Task中的任何位置, 對(duì)于一個(gè)新的Intent請(qǐng)求如果在Task棧頂, 則會(huì)用棧頂?shù)腁ctivity響影Intent請(qǐng)求,

                     而不會(huì)重新實(shí)例化對(duì)象接收請(qǐng)求, 如果沒(méi)有在棧頂, 則會(huì)實(shí)例化一個(gè)新的對(duì)象接收Intent請(qǐng)求.

             

               (3) singleTask: 

             

                    "launchMode"設(shè)置為"singleTask"的Activity總是在棧底, 只能被實(shí)例化一次, 它允許其它Activity壓入"singleTask"的Activity

                     所在的Task棧,如果有新的Intent請(qǐng)求有此標(biāo)志的Activity, 則系統(tǒng)會(huì)清除有此標(biāo)志的Task棧中的全部Activity,并把此Activity顯示出來(lái).

             

               (4) singleInstance: 

             

                     launchMode"設(shè)置為"singleInstance"的Activity總是在棧底, 只能被實(shí)例化一次, 不允許其它的Activity壓入"singleInstance"

                     的Activity所在Task棧,  即整個(gè)Task棧中只能有這么一個(gè)Activity.

             

            5. taskAffinity屬性: 

             

               (1) taskAffinity屬性應(yīng)和FLAG_ACTIVITY_NEW_TASK標(biāo)志及allowTaskReparenting屬性結(jié)合使用, 如果只使用taskAffinity屬性,

                    請(qǐng)參考上面Task默認(rèn)的行為.

             

               (2) 與FLAG_ACTIVITY_NEW_TASK標(biāo)志結(jié)合:

             

                   a. 前題: Activity A和Activity B在同一個(gè)應(yīng)用中, Activity A與Activity B設(shè)置不同的taskAffinity屬性.

             

                       操作: Activity A啟動(dòng)開(kāi)僻Task堆棧,命名為T(mén)askA(TaskA堆棧狀態(tài): A), 在Activity A中啟動(dòng)Activity B, 啟動(dòng)Activity B

                               的Intent中設(shè)置FLAG_ACTIVITY_NEW_TASK標(biāo)志,這時(shí)系統(tǒng)會(huì)新開(kāi)僻一個(gè)Task堆棧,TaskB(TaskB堆棧狀態(tài): B).

             

                   b. 前題: Activity A在"TaskOne應(yīng)用"中, Activity C在"TaskTwo應(yīng)用"中, Activity A和ActivityC設(shè)置了相同的taskAffinity屬性.

             

                       操作: Activity A啟動(dòng)開(kāi)僻Task堆棧,命名為T(mén)askA(TaskA堆棧狀態(tài): A), 在Activity A中啟動(dòng)Activity C, 啟動(dòng)Activity C的

                               Intent中設(shè)置FLAG_ACTIVITY_NEW_TASK標(biāo)志,這時(shí)Activity C會(huì)壓入與Activity A堆棧相同的TaskA堆棧(TaskA堆棧狀態(tài): AC).

             

               (3) 與allowTaskReparenting屬性:

             

                     例: 在"TaskOne應(yīng)用"中有一個(gè)天氣預(yù)報(bào)Activity A, Activity A與"TaskOne應(yīng)用"中的其它Activity有默認(rèn)的關(guān)系

                          (taskAffinity屬性都沒(méi)有設(shè)置), 并且allowTaskReparenting屬性設(shè)置為true, 現(xiàn)在存在一個(gè)"TaskTwo應(yīng)用

                          "啟動(dòng)了"TaskOne應(yīng)用"中的天氣預(yù)報(bào)Activity A,  這時(shí)Activity A與"TaskTwo應(yīng)用"中的Activity在同一個(gè)Task,

                          命名這個(gè)Task堆棧為T(mén)askA, 這時(shí)"TaskOne應(yīng)用"啟動(dòng), 并且又打開(kāi)發(fā)天氣預(yù)報(bào)Activity A, 這時(shí)Activity A會(huì)從TaskA堆棧中轉(zhuǎn)移到

                          "TaskOne應(yīng)用"所在的堆棧, 即Activity A可以在多個(gè)堆棧中來(lái)回轉(zhuǎn)移.       
               
            6. alwaysRetainTaskState屬性:

             

                如果Task堆棧中的Root Activity設(shè)置了此屬性值為true, 不管出現(xiàn)任何情況, 一直會(huì)保留Task棧中Activity的狀態(tài).

             

            7. clearTaskOnLaunch屬性:    

                如果Task堆棧中的Root Activity設(shè)置了此屬性值為true, 只要你一離開(kāi)這個(gè)Task棧, 則系統(tǒng)會(huì)馬上清理除了Root Activity的全部Activity.

             

            8. finishOnTaskLaunch屬性:

             

                如果某Activity設(shè)置了finishOnTaskLaunch屬性, 只要你一離開(kāi)這個(gè)Task棧, 則系統(tǒng)會(huì)馬上清除這個(gè)Activity,

                不管這個(gè)Activity在堆棧的任何位置.

            posted on 2013-10-31 20:49 大龍 閱讀(268) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久精品国产精品青草app| 久久久久久久女国产乱让韩| 无码国内精品久久人妻蜜桃| 久久久久久亚洲Av无码精品专口 | 久久久久久毛片免费播放| 久久精品人成免费| 久久精品一区二区影院| 久久99久国产麻精品66| 狠狠色丁香婷婷综合久久来 | 亚洲国产精品无码久久久蜜芽| 国内精品久久久久影院一蜜桃| 久久精品成人| 久久久国产精品亚洲一区| 久久综合色区| 99国内精品久久久久久久| 日韩精品久久久肉伦网站| 久久久久这里只有精品| 潮喷大喷水系列无码久久精品| 午夜精品久久影院蜜桃| 四虎国产精品免费久久久| 丁香色欲久久久久久综合网| 久久精品国产黑森林| 嫩草影院久久99| 久久久久久久亚洲Av无码| 亚洲欧洲日产国码无码久久99| 久久精品无码一区二区app| 久久综合中文字幕| 久久婷婷激情综合色综合俺也去 | 久久久精品2019免费观看| 18禁黄久久久AAA片| 婷婷久久综合| 欧美亚洲日本久久精品| 九九久久精品无码专区| 99久久精品免费观看国产| 91精品国产色综久久| 99久久精品无码一区二区毛片| 久久精品无码一区二区三区| 国产成人久久精品区一区二区| 亚洲成色WWW久久网站| 热re99久久精品国99热| 久久午夜伦鲁片免费无码|