您好,登錄后才能下訂單哦!
Android中有哪些啟動模式,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
不同程序的Android啟動模式可以共享一個affinity;同一個程序的activity可以使用不同的afninity。afninity在符合以下2個條件的時候啟動:當啟動acitity的Intent中含有FLAG_ACTIVITY_NEW_TASK 節點,或者一個activity的allowTaskReparenting 屬性設置為"true"。
之前提到,任務的默認通過startActivity(). 激活的默認activity也和其他activity在一個堆棧里面。但是引發這個activity的Intent通過startActivity() 方法傳遞了 FLAG_ACTIVITY_NEW_TASK 節點。望文知意,這個節點表示新的任務。但是,也不一定;如果任務中沒有含有此afinity的activity,那么它從默認的activity開始。
allowTaskReparenting 節點如果activity的 allowTaskReparenting 屬性設置為 "true", 它就可以脫離開始它的任務,然后通過它的afinity指引,走入下一個任務。例如,假設“旅游軟件”有一個activity可以獲取指定城市的天氣。
這個activity和此程序中的其他activity有同樣的afinity(默認的afinity)。并且允許重新轉入另外的任務。某個activity開始了天氣預報動作,它一開始屬于這個任務;但是旅游程序到前臺運行的時候,天氣預報acivity被分配到旅游程序運行。
如果從用戶角度看,一個.apk文件包含許多程序,你必須適當的分配不同的affinity給activitis,哪個任務將包含intent指定要運行的activity:對于 "standard" 和 "singleTop" 模式,啟動activity的intent 。
(即調用 startActivity()方法的) —除非intent對象包含FLAG_ACTIVITY_NEW_TASK 節點,如果是的話,會像上個章節描述的一樣, Affinities and new tasks,另外一個任務會承載這個activity。
相對的, "singleTask" 和 "singleInstance" 模式使得activity永遠在tast的根,他們初始化一個任務,不會融入到其他任務中 。activity是否會有多個實例. "standard" 或 "singleTop"模式的activity可以被示例化多次,屬于多個任務,或者一個任務中有多個此activity的實例。
相對的,, "singleTask" 和 "singleInstance" 模式的activities限制為只能有一個實例。因為這些activity在任務的根,這表示,任務也只有一個。同一個任務中是否可以有其他的activity: "singleInstance" 模式的activity所在的任務中不能有其他的activity ,如果啟動其他activity。
那么其他activity 會被附加到新的任務(不管新activity的Android啟動模式是什么) — 就像intent使用了 FLAG_ACTIVITY_NEW_TASK 標記。在其他方面, "singleInstance" 和 "singleTask"沒有什么區別。
其他三種模式允許多個acitvity在同一個任務中。singleTask 的activity必須在任務的根,它可以啟動其他設置到該任務的activity。而standard" 和 "singleTop"可以用于任務的任何位置。
一個類的新實例是否可以接受、處理其他部分發來的intent: 默認的"standard" 模式可以響應任何新的intent。每個實例處理一個intent。 "singleTop" 模式的activity如果在任務的頂部,則用已有的實例處理所有請求該實例的intent;反之創建一個新的實例,并壓入任務的頂部。
例如,一個任務包含根activityA,和其他activityB,C,D,D在任務堆棧的頂部,即堆棧為A-B-C-D. 一個intent請求D。如果D是"standard" Android啟動模式,則D的一個新實例被創建,任務堆棧變為A-B-C-D-D. 但是。
如果D的Android啟動模式是"singleTop", 則現有的D的實例來響應intent,所以任務堆棧仍然是A-B-C-D. 另外一種情況,如果intent來請求B,如果B是 "standard" 或者 "singleTop" 模式,B都將創建一個新的實例來響應,則任務堆棧為 A-B-C-D-B。
就像上面提到的,"singleTask" 或 "singleInstance" 的activity只有1個實例,所以這個實例要處理所有的intent。"singleInstance" 的activity永遠在任務堆棧的頂部(因為它是任務中的***個activity),所以這個實例處理所有的intent。可能有其他的activity在"singleTask" 的activity的頂部,因此這個實例不會處理intent請求,因此intent的請求會失敗;(即使失敗,intent也會激活這個程序)
注意:當一個新的activity的實例為了響應intent而創建時,用戶可以按BACK鍵回到上一個狀態(上一個activity)。但是當一個已經存在的activity處理新的intent的時候,用戶不能按BACK鍵后退了。
關于Android中有哪些啟動模式問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。