元素的android:launchMod屬性的使用

來源:互聯網
上載者:User

 

AndroidManifest.xml檔案中,<activity>元素是使用頻率最高的元素,該元素宣告了應用中的活動(Activity)。常用的形式如下: 
<activity            android:label="@string/app_name"            android:name=".HelloAndroidActivity" >

另外,該<activity>元素還有個android:launchMode屬性,該launchMode屬性主要用來控制Activity和Task的關係,下面是該屬性的取值及含義:  1,standard是該屬性的預設值,是預設的任務模式。在沒有其他因素的影響下,當調用方通過Intent啟動此活動時,該Activity會被構造出一個新執行個體並被加入到調用者的任務棧中去。 2,singleTop與standard基本一致,僅在被請求的Activity正好位於棧頂時情況有所區別。對於launchMode屬性等於singleTop的Activity,不再構造新的執行個體加入到Task棧中,而是將新收到的Intent發送給棧頂的Activity,棧頂的Activity可以通過重載onNewIntent方法來處理新的Intent。這個模式降低了activity位於棧頂時的一些重複開銷。 3,singleTask,當啟動具有此項配置的Activity的時候,會先在系統中尋找和它的屬性值 taskAffinity值相同的任務是否存在;如果存在這樣的任務,此Activity就會在這個任務中啟動,否則就在新任務中啟動。因此,如果我們想使得"singleTask"配置模式的Activity在新的任務中啟動,就要為它設定一個獨立的taskAffinity屬性值。
如果設定了"singleTask"啟動模式的Activity啟動時找到了相同taskAffinity
的任務,系統將在已存在的任務中尋找該Activity的執行個體,並將此Activity執行個體上面的Activity全部結束掉,即最終這個Activity執行個體會位於任務的堆棧頂端中。另外,要想taskAffinity屬性相同的Activity被放在同一個Task中,<activity>中的allowTaskReparenting屬性需設定為true,或者調用方將Intent的flag添加FLAG_ACTIVITY_NEW_TASK時才會生效。

<activity            android:label="@string/app_name"            android:launchMode="singleTask"            android:name=".HelloAndroidActivity"            android:taskAffinity="hello"            android:allowTaskReparenting="true" >

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 4, singleInstance,該Activity是它所在的任務棧中僅有的一個Activity,其它Activity會被放入別的Task中進行。 借用別人的總結:standard模式,可以多次執行個體化,同一任務棧中可以存在多個該Activity的執行個體。
singleTop模式,可以多次執行個體化,但是不會有多個相鄰的Activity執行個體,當堆棧的頂部為相同的Activity時,會調用onNewIntent函數。
singleTask模式,同一個應用中調用該Activity時,如果該Activity沒有被執行個體化,會在本應用程式的Task內執行個體化,如果已經執行個體化,會將Task中其上的Activity銷毀後,調用onNewIntent;其它應用程式調用該Activity時,如果該Activity沒有被執行個體化,會建立新的Task並執行個體化後入棧,如果已經執行個體化,會銷毀其上的Activity,並調用onNewIntent。singleInstance模式,載入該Activity時如果沒有執行個體化,則會建立新的Task後,執行個體化入棧,如果已經存在,直接調用onNewIntent,該Activity的Task中不允許啟動其它的Activity,任何從該Activity啟動的其他Activity都將被放到其他task中。   
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.