2015-04-26 68 views
3

我有一個Activitylaunchmode = "singleInstance",它是應用程序的啓動器Activity。現在我正在嘗試檢測哪個Flag我的Activity已被啓動,但我無法在documented page上找到標記ID和IntentFlag;這是標誌啓動器活動上的未知意圖標記

String version of the Flag id is 270532608 

和意圖的字符串版本是

04-25 20:18:57.061: V/logtag(1665): Intent { act=android.intent.action.MAIN 
     cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=<filtered> } 

應用程序第一次啓動時,系統調用我Activity這個Flag = Intent.FLAG_ACTIVITY_NEW_TASK或字符串版本= 268435456(這是它應該)但是當我退出應用程序,並從啓動器再次啓動時,我得到此標誌0x10200000而不是以前的標誌

所以我的問題是誰能告訴我這是什麼標誌?

以及爲什麼我的活動正在被調用?

並且是否有任何其他來自啓動器的實例,我的活動可能會用不同的標誌觸發,除了未知的標誌& 0x10200000?

回答

6

這是標誌的組合:

public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000; 

public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED = 0x00200000; 

0x10000000的是268435456.
0x00200000的十六進制表示爲2097152.
的十六進制表示如果添加了這些數字,你會得到:
0x10200000,這是270532608的十六進制表示。

所以你第一次啓動你的應用程序,你只是得到FLAG_ACTIVITY_NEW_TASK,但第二次你也會得到FLAG_ACTIVITY_RESET_TASK_IF_NEEDED。這只是一個按位或運算。 要檢查您想要的標誌有效,你可以做一個位與這樣的:

boolean hasNewTaskFlag = (flg & FLAG_ACTIVITY_NEW_TASK) != 0; 
+0

Omg!先生?如果我可能會問,你知道這是經驗還是有一些來源,我不懷疑你,我只需要被告知,因爲我可以檢測到你指出的組合?順便說一句,你有我的upvote – Elltz

+0

所有的標誌凸輪可以在http://developer.android.com/reference/android/content/Intent.html – Endran

+0

文檔中看到你只需要按位操作,看看哪些標誌是活動的。 – Endran

1

首先,這flag0x10200000值是HexadecimalDecimal這就是爲什麼你可能無法找到任何有用的信息,如果你想谷歌它。

這就是爲什麼您必須首先將convert設置爲Decimal。然後你會看到真正的flag值是270532608這意味着開始了,爲什麼我的活動被稱爲與它的前一個

一個新的任務?

因爲您可能正在恢復處於後臺的實例(最近的應用程序列表)。如果您想了解更多關於這個意圖標誌點擊不啓動新的實例

here

參考:Start new activity in window manager

+0

所以如果我有'excludefromrececents = TRUE;'會有機會,我不會得到這個標誌?我正試圖抓住主席先生,這是因爲'singleinstance'嗎?如果我有'singletask'怎麼辦?但我認爲即使我沒有注意到它,我的活動與其任務完成了。並快速捕捉我沒有谷歌搜索十六進制數字(:只是一個字, – Elltz

+0

使用'android:noHistory =「true」'會讓你再次得到那個標誌,如果你用你的發射器活動回來按下並重新啓動 – TheLittleNaruto

+0

是但是在這個活動中,我引發了startActivityforResult,並且因爲我沒有得到我的返回意圖,所以我將它從我的選項中排除@TheLittleNaruto,但是,謝謝您,先生, – Elltz