Activity啟動模式(Launch Mode)


這篇的簡短解說可以快速了解啟動模式
Activity有四種啟動模式,它們是:
  • standard 標準模式,每次都新建一個實例對象
  • singleTop 如果在任務棧頂發現了相同的實例則重用,否則新建並壓入棧頂
  • singleTask 如果在任務棧中發現了相同的實例,將其上面的任務終止並移除,重用該實例。否則新建實例併入棧
  • singleInstance 允許不同應用,進程線程等共用一個實例,無論從何應用調用該實例都重用
只要在AndroidManifest.xml對activity 增加android:launchMode屬性即可指定
android:launchMode="singleInstance"

Android Developer文件也有解說
https://developer.android.com/guide/components/tasks-and-back-stack?hl=zh-tw

要觀察Task可以在adb shell輸入下面的指令
dumpsys activity activities

launchMode寫在Manifest裡面是指若呼叫者沒有加FLAG時的預設行為, 要改變這個預設結果只要在intent中setFlag就可以改變了

FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP

這裡看到一個有趣的參數FLAG_ACTIVITY_NO_ANIMATION, 可以免除切換APP的動畫

如果發現intent都是null, 可能是onNewIntent需要Override一下
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}
http://stackoverflow.com/questions/6352281/getintent-extras-always-null
http://fanli7.net/a/bianchengyuyan/C__/20130619/372727.html

留言