



免費預覽已結束,剩余1頁可下載查看
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Activity啟動模式講解:姜成波日期:2011-4-21最近一直在看任務還有Activity啟動模式這塊,一直對這塊存在疑惑,為什么要有不同的啟動模式?使用這些會為我們的開發帶來什么好處?今天周討論,和同事們針對此問題,大家相互探討了一下。在多Activity開發中,有可能是自己應用之間的Activity跳轉,或者夾帶其他應用的可復用Activity。也可能會希望跳轉到原來某個Activity實例,而不是產生大量重復的Activity。為了有效的利用有限的內存資源,這需要為Activity配置特定的加載模式,而不是使用默認的加載模式。加載模式分類及在哪里配置Activity有四種加載模式: standard singleTop singleTask singleInstance設置的位置在AndroidManifest.xml文件中activity元素的android:launchMode屬性:也可以在Eclipse ADT中圖形界面中編輯:針對四種啟動模式,我做了一個小例子LaunchMode_Test,大家可以通過按照下面的操作修改例子啟動模式,來加深理解。三個Activity界面如下Fx_Main: Activity2:Activity3:standard首先說standard模式,也就是默認模式,不需要配置launchMode。運行例子從Fx_Main-Activity2-Activity2-Activity2可見,一直點回到Activity2按鈕時,Log信息如下:發現每次都創建了Activity2的新實例。standard的加載模式就是這樣的,intent將發送給新的Activity實例。現在點Android設備的回退鍵,可以看到是按照剛才創建Activity實例的倒序依次出現,類似退棧的操作,而剛才操作跳轉按鈕的過程是壓棧的操作。singleTopsingleTop和standard模式,都會將intent發送新的實例(后兩種模式不發送到新的實例,如果已經有了的話)。不 過,singleTop要求如果創建intent的時候棧頂已經有要創建的Activity的實例,則將intent發送給該實例,而不發送給新的實例。還是用剛才的示例,只需將Activity2的launchMode改為singleTop,就能看到區別。運行的時候會發現,按多少遍按鈕,都是相同的Activity2實例,因為該實例在棧頂,因此不會創建新的實例。如果回退,回到Fx_Main,然后將退出應用。singleTop模式,可用來解決棧頂多個重復相同的Activity的問題。如果是Fx_Main跳轉到Activity2,再跳轉到Fx_Main,行為就和standard一樣了,會在Activity2跳轉到Fx_Main的時候創建Fx_Main的新實例,因為當時的棧頂不是Activity2實例。singleTasksingleTask模式和后面的singleInstance模式都是只創建一個實例的。當intent到來,需要創建singleTask模式Activity的時候,系統會檢查棧里面是否已經有該Activity的實例。如果有直接將intent發送給它。(注意此時原在此Activity棧中上面的Activity將會被殺死)。把Activity2的啟動模式改成singleTask,然后啟動Fx_Main-跳轉到Activity2-Activity3-Actvity2此時看Log信息。可見從Ac3再跳轉到Ac2時,因為Ac2之前在棧中是存在的所以不生成新的Ac2實例,而是在棧中找到此Ac2,并將在Ac2上面的Ac3殺死,所以此時棧中只有Fx_Main和Ac2,在Ac2點返回會直接退到Fx_Main然后退出。singleInstance解釋singleInstance模式比較麻煩。首先要說一下Task(任務)的概念。按照字面意思,任務就是自己要實現的一個目的,而在Android中的Task的定義是一系列Activity的集合,即要達到自己最終要到的Actvity,之前所有經歷過的Actvity的集合。它可以是同一個應用內部的,也可以是兩個不同應用的。Task可以認為是一個棧,可放入多個Activity。比如啟動一個應用,那么 Android就創建了一個Task,然后啟動這個應用的入口Activity,就是intent-filter中配置為main和launch的那個。這個Activity是根(Root)Activity,可能會在它的界面調用其他Activity,這些Activity如果按照上面那三個模式,也會在這個棧(Task)中,只是實例化的策略不同而已。驗證的辦法是調用和打印Activity的taskId通過this.getTaskId();會發現,無論切換Activity,taskId是相同的。當然也可以在這個單一的Task棧中,放入別人的Activity,比如google地圖,這樣用戶看過地圖按回退鍵的時候,會退棧回到調用地圖的Activity。對用戶來說,并不覺得在操作多個應用。這就是Task的作用。可以理解為回退的作用是在先從當前Actvity同一個Task進行回退。但是,有這樣的需求,多個Task共享一個Activity(singleTask是在一個task中共享一個Activity)。現成的例子是google地圖。比如我有一個應用是導游方面的,其中調用的google地圖Activity。那么現在我比如按home鍵,然后到應用列表中打開google地圖,你會發現顯示的就是剛才的地圖,實際上是同一個Activity。如果使用上面三種模式,是無法實現這個需求的。google地圖應用中有多個上下文Activity,比如路線查詢等的,導游應用也有一些上下文Activity。在各自應用中回退要回退到各自的上下文Activity中。singleInstance模式解決了這個問題(繞了這么半天才說到正題)。讓這個模式下的Activity單獨在一個task棧中。這個棧只有一個Activity。導游應用和google地圖應用發送的intent都由這個Activity接收和展示。這里又有兩個問題: 如果是這種情況,多個task棧也可以看作一個應用。比如導游應用啟動地圖Activity,實際上是在導游應用task棧之上 singleInstance模式創建的(如果還沒有的話,如果有就是直接顯示它)一個新棧,當這個棧里面的唯一Activity,地圖Activity 回退的時候,只是把這個棧移開了,這樣就看到導游應用剛才的Activity了; 多個應用(Task)共享一個Activity要求這些應用都沒有退出,比如剛才強調要用home鍵從導游應用切換到地圖應用。因為,如果退出導游應用,而這時也地圖應用并未運行的話,那個單獨的地圖Activity(task)也會退出了。然后進行測試,我們還是將Activity2的啟動模式設置為singleInstance模式,然后啟動Fx_Main-Actvity2-Actvity3然后看一下Log信息。可以看到Fx_Main以及Activity3的TaskID為9,而Actvity2的TaskID為10,此時在Actvity3點返回會發現先退到Fx_Main,繼續返回會到Actvity2最后退出。遺留問題:1. IntentFilter里設置優先級無效,系統仍然會彈出activity選擇列表。解答:雖然優先級定義是-10001000,但只有當存在與負數比較時,優先級就會發生作用,即正數之間比較,以及正數與0之間比較都不會出現優先級高低問題,但是正數與負數,0與負數,或者負數之間進行比較,優先級就會發揮作用,而且越大的優先級越高。2. 如何顯式調用不同應用之間的activity未解決3. 按照SDK中的說明使用singTask啟動模式系統會在新task根部創建一個activity,并且將intent指向它。然而,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《電工》高級練習題(含參考答案)
- 細節管理提升護理質量
- AI大模型賦能港口設施數字運維一體化智能解決方案
- 重癥監護患者夜間睡眠
- 網絡服務器配置與管理(微課版) 習題及答案
- 2025年全民科學素質競賽網絡知識競賽試題庫及答案(共150題)
- 銷售策劃目的試題及答案
- 河北省張家口市普通高中學業水平選擇性模擬考試三模 英語試題(含答案)
- 2025年山東省泰安市東平縣(五四學制)中考三模歷史試題(含答案)
- 2025【合同范本】租賃合同解除協議模板
- 《燃煤火力發電企業設備檢修導則》
- 上海市徐匯區2023-2024學年高二下學期3月質量監控考物理模擬試題(附答案)
- 2023年-2024年新《管理學原理》考試題庫(含答案)
- 深圳市企業數據合規指引
- 新能源汽車電機軸項目實施方案
- 2023年山東省青島市中考地理試卷(附詳細答案)
- 老年人能力評估標準解讀(講義)課件
- RTO工藝流程簡介
- 電機行業報告
- 非常規作業清單(修改版)
- 巨量廣告投放培訓課件
評論
0/150
提交評論