2012-07-02 39 views
3

This answer建議使用AndroidManifest的android:launchMode="singleTask"將活動限制爲單個實例。共享庫項目活動的單實例?

,對其中所有的活動都是該項目的一部分應用是偉大的,但是當我有使用Library Project在該應用的主要活動是定義了幾個應用程序,庫項目的AndroidManifest 被忽略,所以我不能那裏真的使用那個android:launchMode="singleTask"屬性。

如果我使用android:launchMode="singleTask"在應用程序的AndroidManifest.xml,那麼每個活動都有一個不同的名稱和該屬性將限制只能爲單一實例的相同的應用程序,無法使用此共享活動不同的應用(用作圖書館項目)。

我真正想要的是,在任何給定的時刻,只有一個應用程序(不同的應用程序使用該共享庫項目的活動)可以運行。

這是可以使用android:launchMode="singleTask"屬性嗎?

如果這是不可能的,推薦使用其他方法?

回答

2

庫項目就是您用來重用代碼的東西。編譯應用程序時,生成的.apk文件不知道幫助創建它的庫項目。也就是說,通過操作庫項目的AndroidManifest.xml文件,不應該有可能強制單身屬性(在不同的.apk之間)。

您可以通過子類Application來強制執行此行爲。你可以閱讀更多關於這個here

+1

感謝您的鏈接。確實有趣的答案。不過,不確定「* visible *」是否與「* running *」相同。 – ateiob

+0

我很好奇...什麼原因阻止多個應用程序無論如何運行? (不是說這是不對的......我只是好奇)。 –

+0

當2個或更多這樣的應用程序同時運行時,它們都會播放導致雜音的MP3文件。我大概可以管理對共享揚聲器/耳機或媒體播放器的訪問,但是現在我只想給用戶提供一個友好的消息,說這種類型的另一個應用程序正在運行。 – ateiob

3

嘗試使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT。無論何時啓動一個活動,如果該活動的一個實例存在,它將被帶到堆棧的前面,而不是第二次創建。這可以確保在任何特定時刻只有一個Activity保留在堆棧上。

另一種方法是使用a static variable。不知道這是多麼可靠。

+0

Intent.FLAG_ACTIVITY_REORDER_TO_FRONT對我沒有幫助,因爲我沒有以編程方式啓動我的應用程序的活動。這一切都是通過清單文件完成的。靜態變量方法更合適,但@ AlexLockwood的答案通過鏈接提供更多信息。謝謝。 – ateiob