2013-04-08 30 views
6

我創建了一個帶有按鈕的簡單應用程序。點擊它會觸發通知,點擊通知將啓動相同應用程序的新實例。但是,我希望點擊該通知應該使我回到觸發通知的應用程序實例。爲此,我請教了Android文檔的FLAG_ACTIVITY_NEW_TASK升旗Android - 使用FLAG_ACTIVITY_NEW_TASK

當使用這個標誌,如果一個任務已經爲你現在開始的活動運行,則新的活動將不會啓動;相反,當前任務將被簡單地置於屏幕的最前面狀態。請參閱FLAG_ACTIVITY_MULTIPLE_TASK瞭解禁用此行爲的標誌。

基於此創建傳遞給PendingIntent的意圖時,我設置了此標誌。但是,單擊通知仍會啓動應用程序的新實例。

我在做什麼錯?

+0

您開始啓動的「活動」是否已在您的應用中啓動(當您點擊通知時),還是您在應用中啓動了另一個「活動」? – 2013-04-08 14:55:08

+0

@StevenByle:沒有與我想要開始的活動相同的活動 - 正在運行並觸發通知的活動。 – Cygnus 2013-04-08 14:56:39

+0

嗯,也許發佈你的'意圖'代碼...也許這是簡單的,我們失蹤了...... – 2013-04-08 14:58:58

回答

4

請記住,當您單擊Notification它是從Context意圖正在啓動。 上下文沒有Activity的任務(事實上,它將是一個空白的任務)。

這樣做的結果是兩個版本的Activity(儘管仍然只有一個實例Application)正在運行。每個Activity正在運行不同的Task

如果你不需要任何的棧相同類型的副本活動,你可以使用這裏的答案:

https://stackoverflow.com/a/2327027/726954

否則,有許多方法來「解決」這個問題,包括跟蹤哪些活動處於運行狀態的單例變量和應用程序上下文方法。

您可能需要搜索並優化您的問題。

+0

Ok ..但是當我們創建PendingIntent時,我們指定開始活動的上下文作爲getActivity()的第一個參數。所以不應該根據這種情況開始?或者我錯過了什麼? – Cygnus 2013-04-08 15:59:59

+0

另外,如果文檔說「如果一個任務已經在運行,您現在正在啓動的活動,那麼一個新的活動將不會啓動」,那麼在這種情況下,活動的任務是否正在運行? – Cygnus 2013-04-08 16:16:39

+0

在「任務」上做一些閱讀。這裏是關於getActivity的文檔 - http://developer.android.com/reference/android/app/PendingIntent.html#getActivity(android.content.Context,int,android.content.Intent,int) - 它說「Note該活動將在現有活動的上下文之外開始「 – Graeme 2013-04-08 16:21:14

1

Android中的任務是一個單獨的用戶工作流程。如果您有時會看到主屏幕,通常意味着您要開始一個新屏幕。 刪除國旗,它應該工作。如果沒有,請嘗試使用Single top。

+0

嗯,我沒有得到它......當點擊通知時,觸發我的通知的同一個實例應該出現。如果我沒有設置任何標誌,一個新的實例啓動,我不想要。 – Cygnus 2013-04-08 14:54:49

+1

嘗試使用單個頂部。你想要完成的事情實際上非常棘手 - 我在家裏有這樣的代碼,可以稍後查看它。 – meredrica 2013-04-08 14:55:49

+0

@meredrica希望能夠解決類似問題的很多見解。我結束使用清單的「android:launchMode =」singleTop「',但它阻止了應用程序回退歷史記錄,即,我即時回收了偏好活動更改主題。謝謝。 – dentex 2014-02-24 14:34:43

相關問題