[Andriod] android中singleTask的home鍵的問題

在Android設計中遇到這樣一個問題:java

      Activity A,在AndroidManifest.xml中設置它的一個<inter-filter>爲android

Java代碼  收藏代碼測試

<intent-filter>  
    <action android:name="android.intent.action.MAIN" />  
 <category android:name="android.intent.category.LAUNCHER" />  
</intent-filter>

      A的launchMode爲「singleTask」。spa

      Activity B,設置launchMode爲「standard」。設計

      這樣,A做爲啓動應用的入口Activity;在A中進行某個操做能夠跳轉到B。code

      若是此時,點擊‘Home’鍵返回到Home Screen後,再次點擊應用圖標進入應用,出現的界面爲A,而非B。經過一些測試,發現,在從新進入應用時,在Back stack中,位於A之上的其餘Activity均被銷燬了。xml

開發的時候,因爲用到了singleTask用法不當,形成了一些沒必要要的麻煩,現總結以下:開發

現有Activity:A,B,C,D;啓動順序是A->B->C->D,其中,B是singleTask的。it

A到B後,A finish掉;B到C後,B不finish;C到D後,C不finish;在D啓動B,就能夠一會兒將C、D kill掉,只保留B。可是,io

這個時候你從B退出(整個程序退出了),長按Home鍵啓動,進來的第一個是B,而不是A,這就已經不對了;  並且, 剛纔就算你不退出,從B再進到C,按Home,再長按Home進入,回來的是B而不是C。

解決方案以下:

將singleTask改爲singleTop。

這樣以來,剛纔從D啓動B的時候,就要用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

也就是說,singleTask會自動執行clear top, 而singleTop須要手動;而從Home鍵啓動,若是是singleTask的話就自動clear top了,因此到不了想要到的Activity。

這樣就解決了問題,可是上面的說法是我的的理解。


至此,咱們總結一下,設置了"singleTask"啓動模式的Activity的特色:

        1. 設置了"singleTask"啓動模式的Activity,它在啓動的時候,會先在系統中查找屬性值affinity等於它的屬性值 taskAffinity的任務存在;若是存在這樣的任務,它就會在這個任務中啓動,不然就會在新任務中啓動。所以,若是咱們想要設置 了"singleTask"啓動模式的Activity在新的任務中啓動,就要爲它設置一個獨立的taskAffinity屬性值。

        2. 若是設置了"singleTask"啓動模式的Activity不是在新的任務中啓動時,它會在已有的任務中查看是否已經存在相應的Activity實 例,若是存在,就會把位於這個Activity實例上面的Activity所有結束掉,即最終這個Activity實例會位於任務的堆棧頂端中。

相關文章
相關標籤/搜索