2013-06-21 118 views
0

我正在開發一個應用程序,它運行的基本UI和服務可以接收緊急情況。如果用戶在用戶界面中並按下home或Back,則會出現通知並且服務繼續運行。如果服務收到緊急情況,我想在用戶界面中打開活動。爲此,我必須在Intent標誌FLAG_ACTIVITY_NEW_TASK中使用服務中的startActivity。服務和啓動/重新啓動活動

但這意味着,如果UI仍在後臺運行,則不會重新打開。從那時起,我的許多UI交互似乎都發生在舊的,隱藏的UI上,而不是新的UI已經打開。此外,如果我關閉當前的用戶界面,我有時會在它後面有舊的用戶界面。

我想從服務中,我可以帶來舊的用戶界面或打開一個新的,取決於舊的用戶界面是否仍在運行。

我已經嘗試使用FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_NEW_TASK一起清除UI的任何其他實例,然後在新任務中打開UI,但CLEAR_TASK是API 11及以上;我的應用程序支持10.

以上任何幫助表示讚賞。

回答

1

我這個做什麼是活動的onResume(讓您得到Service實例)做一個bindService,然後添加一個方法來從Activity收到Handler實例Service實例。在中,您將Service上的Handler設置爲空。這樣Service就知道(通過檢查它的內部Handler實例)是否已經有可用的UI。如果有的話,它會發送事件發生的Handler a Message。如果沒有Handler,它會啓動一個新的用戶界面。

+0

看起來我會選擇這個選項。謝謝您的幫助! – Stephen

0

你可以儘量選擇發射模式「singleTask」在您的清單文件:

<activity 
    android:name=".MainActivity" 
    android:launchMode="singleTask" > 

隨着「singleTask」啓動模式下,您的活動將被實例化一次。

+0

不幸的是,這與服務中必須使用的CLEAR_TOP標誌衝突才能啓動一個活動 – Stephen