免費預(yù)覽已結(jié)束,剩余1頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Activity啟動模式講解:姜成波日期:2011-4-21最近一直在看任務(wù)還有Activity啟動模式這塊,一直對這塊存在疑惑,為什么要有不同的啟動模式?使用這些會為我們的開發(fā)帶來什么好處?今天周討論,和同事們針對此問題,大家相互探討了一下。在多Activity開發(fā)中,有可能是自己應(yīng)用之間的Activity跳轉(zhuǎn),或者夾帶其他應(yīng)用的可復(fù)用Activity。也可能會希望跳轉(zhuǎn)到原來某個Activity實例,而不是產(chǎn)生大量重復(fù)的Activity。為了有效的利用有限的內(nèi)存資源,這需要為Activity配置特定的加載模式,而不是使用默認的加載模式。加載模式分類及在哪里配置Activity有四種加載模式: standard singleTop singleTask singleInstance設(shè)置的位置在AndroidManifest.xml文件中activity元素的android:launchMode屬性:也可以在Eclipse ADT中圖形界面中編輯:針對四種啟動模式,我做了一個小例子LaunchMode_Test,大家可以通過按照下面的操作修改例子啟動模式,來加深理解。三個Activity界面如下Fx_Main: Activity2:Activity3:standard首先說standard模式,也就是默認模式,不需要配置launchMode。運行例子從Fx_Main-Activity2-Activity2-Activity2可見,一直點回到Activity2按鈕時,Log信息如下:發(fā)現(xiàn)每次都創(chuàng)建了Activity2的新實例。standard的加載模式就是這樣的,intent將發(fā)送給新的Activity實例。現(xiàn)在點Android設(shè)備的回退鍵,可以看到是按照剛才創(chuàng)建Activity實例的倒序依次出現(xiàn),類似退棧的操作,而剛才操作跳轉(zhuǎn)按鈕的過程是壓棧的操作。singleTopsingleTop和standard模式,都會將intent發(fā)送新的實例(后兩種模式不發(fā)送到新的實例,如果已經(jīng)有了的話)。不 過,singleTop要求如果創(chuàng)建intent的時候棧頂已經(jīng)有要創(chuàng)建的Activity的實例,則將intent發(fā)送給該實例,而不發(fā)送給新的實例。還是用剛才的示例,只需將Activity2的launchMode改為singleTop,就能看到區(qū)別。運行的時候會發(fā)現(xiàn),按多少遍按鈕,都是相同的Activity2實例,因為該實例在棧頂,因此不會創(chuàng)建新的實例。如果回退,回到Fx_Main,然后將退出應(yīng)用。singleTop模式,可用來解決棧頂多個重復(fù)相同的Activity的問題。如果是Fx_Main跳轉(zhuǎn)到Activity2,再跳轉(zhuǎn)到Fx_Main,行為就和standard一樣了,會在Activity2跳轉(zhuǎn)到Fx_Main的時候創(chuàng)建Fx_Main的新實例,因為當時的棧頂不是Activity2實例。singleTasksingleTask模式和后面的singleInstance模式都是只創(chuàng)建一個實例的。當intent到來,需要創(chuàng)建singleTask模式Activity的時候,系統(tǒng)會檢查棧里面是否已經(jīng)有該Activity的實例。如果有直接將intent發(fā)送給它。(注意此時原在此Activity棧中上面的Activity將會被殺死)。把Activity2的啟動模式改成singleTask,然后啟動Fx_Main-跳轉(zhuǎn)到Activity2-Activity3-Actvity2此時看Log信息??梢姀腁c3再跳轉(zhuǎn)到Ac2時,因為Ac2之前在棧中是存在的所以不生成新的Ac2實例,而是在棧中找到此Ac2,并將在Ac2上面的Ac3殺死,所以此時棧中只有Fx_Main和Ac2,在Ac2點返回會直接退到Fx_Main然后退出。singleInstance解釋singleInstance模式比較麻煩。首先要說一下Task(任務(wù))的概念。按照字面意思,任務(wù)就是自己要實現(xiàn)的一個目的,而在Android中的Task的定義是一系列Activity的集合,即要達到自己最終要到的Actvity,之前所有經(jīng)歷過的Actvity的集合。它可以是同一個應(yīng)用內(nèi)部的,也可以是兩個不同應(yīng)用的。Task可以認為是一個棧,可放入多個Activity。比如啟動一個應(yīng)用,那么 Android就創(chuàng)建了一個Task,然后啟動這個應(yīng)用的入口Activity,就是intent-filter中配置為main和launch的那個。這個Activity是根(Root)Activity,可能會在它的界面調(diào)用其他Activity,這些Activity如果按照上面那三個模式,也會在這個棧(Task)中,只是實例化的策略不同而已。驗證的辦法是調(diào)用和打印Activity的taskId通過this.getTaskId();會發(fā)現(xiàn),無論切換Activity,taskId是相同的。當然也可以在這個單一的Task棧中,放入別人的Activity,比如google地圖,這樣用戶看過地圖按回退鍵的時候,會退?;氐秸{(diào)用地圖的Activity。對用戶來說,并不覺得在操作多個應(yīng)用。這就是Task的作用。可以理解為回退的作用是在先從當前Actvity同一個Task進行回退。但是,有這樣的需求,多個Task共享一個Activity(singleTask是在一個task中共享一個Activity)。現(xiàn)成的例子是google地圖。比如我有一個應(yīng)用是導游方面的,其中調(diào)用的google地圖Activity。那么現(xiàn)在我比如按home鍵,然后到應(yīng)用列表中打開google地圖,你會發(fā)現(xiàn)顯示的就是剛才的地圖,實際上是同一個Activity。如果使用上面三種模式,是無法實現(xiàn)這個需求的。google地圖應(yīng)用中有多個上下文Activity,比如路線查詢等的,導游應(yīng)用也有一些上下文Activity。在各自應(yīng)用中回退要回退到各自的上下文Activity中。singleInstance模式解決了這個問題(繞了這么半天才說到正題)。讓這個模式下的Activity單獨在一個task棧中。這個棧只有一個Activity。導游應(yīng)用和google地圖應(yīng)用發(fā)送的intent都由這個Activity接收和展示。這里又有兩個問題: 如果是這種情況,多個task棧也可以看作一個應(yīng)用。比如導游應(yīng)用啟動地圖Activity,實際上是在導游應(yīng)用task棧之上 singleInstance模式創(chuàng)建的(如果還沒有的話,如果有就是直接顯示它)一個新棧,當這個棧里面的唯一Activity,地圖Activity 回退的時候,只是把這個棧移開了,這樣就看到導游應(yīng)用剛才的Activity了; 多個應(yīng)用(Task)共享一個Activity要求這些應(yīng)用都沒有退出,比如剛才強調(diào)要用home鍵從導游應(yīng)用切換到地圖應(yīng)用。因為,如果退出導游應(yīng)用,而這時也地圖應(yīng)用并未運行的話,那個單獨的地圖Activity(task)也會退出了。然后進行測試,我們還是將Activity2的啟動模式設(shè)置為singleInstance模式,然后啟動Fx_Main-Actvity2-Actvity3然后看一下Log信息??梢钥吹紽x_Main以及Activity3的TaskID為9,而Actvity2的TaskID為10,此時在Actvity3點返回會發(fā)現(xiàn)先退到Fx_Main,繼續(xù)返回會到Actvity2最后退出。遺留問題:1. IntentFilter里設(shè)置優(yōu)先級無效,系統(tǒng)仍然會彈出activity選擇列表。解答:雖然優(yōu)先級定義是-10001000,但只有當存在與負數(shù)比較時,優(yōu)先級就會發(fā)生作用,即正數(shù)之間比較,以及正數(shù)與0之間比較都不會出現(xiàn)優(yōu)先級高低問題,但是正數(shù)與負數(shù),0與負數(shù),或者負數(shù)之間進行比較,優(yōu)先級就會發(fā)揮作用,而且越大的優(yōu)先級越高。2. 如何顯式調(diào)用不同應(yīng)用之間的activity未解決3. 按照SDK中的說明使用singTask啟動模式系統(tǒng)會在新task根部創(chuàng)建一個activity,并且將intent指向它。然而,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于開學典禮演講稿匯編10篇
- 不一樣的春節(jié)演講稿10篇
- 肯德基寒假實習報告4篇
- 酒店服務(wù)員辭職報告集錦(15篇)
- 西游記讀后感(匯編15篇)
- 春節(jié)小學作文集錦15篇
- 全球視角看珠寶產(chǎn)業(yè)
- 漢字的古詩4句
- 光伏租賃合同(2篇)
- 樓面傾斜處理方案
- 新SAT閱讀電子講義
- 《基業(yè)長青》讀書心得總結(jié)
- 團體建筑施工人員意外傷害保險條款(2012版)
- 合規(guī)性評價報告(2022年)
- 大連市小升初手冊
- 《自然辯證法》課后習題答案自然辯證法課后題答案
- 燃氣工程監(jiān)理實施細則(通用版)
- E車E拍行車記錄儀說明書 - 圖文-
- 人才梯隊-繼任計劃-建設(shè)方案(珍貴)
- 《健身氣功》(選修)教學大綱
- 王家?guī)r隧道工程地質(zhì)勘察報告(總結(jié))
評論
0/150
提交評論