我試圖限制一個應用程序家族,使用相同的活動(在所有共享庫項目中),這樣只有一個這樣的應用程序可以在一次運行。從overriden getApplication()返回一個共享靜態是否安全?
在我的第一輪努力學習如何去說,我才知道:
- 機器人:launchMode =「singleTask」不會做的伎倆。
setVisible(true/false)
inResume()/ onPause()分別是best way來判斷我的應用程序是否正在運行。但是,一旦第二個實例知道第一個實例正在運行,我該怎麼辦?
所以,我想通過始終通過重寫Activity.getApplication()並返回一個共享靜態返回相同的情況下欺騙系統:
public class MyApplication extends Application
{
private static MyApplication s_instance;
public MyApplication()
{
s_instance = this;
}
public static MyApplication getApplication()
{
return s_instance;
}
}
(信用爲理念去@inazaruk)
但是,就像前面提到的可見性解決方案一樣,我現在要做什麼呢?
系統本身是否使用getApplication()來確定是啓動一個新實例還是將它放到堆棧的前面?這安全嗎?
如果答案是「否」,我可以打電話Activity.finish()不要讓第二個活動不能啓動?如果是這樣,我在哪裏做?
- Right in Activity.onCreate()?
- Activity.onResume()?
- MyApplication()? (構造函數)
- 更好的地方嗎?
我有點困惑。你說_a系列的應用程序_但是它們是如何打包的?在Android上,APK包含單個應用程序。該應用程序具有唯一的軟件包名稱和唯一的用戶標識,並在其自己的進程中運行。這意味着如果你在2個獨立的包中有2個應用程序,它們將在2個獨立的進程中運行,因此從'getApplication()'返回靜態實例不會對你有任何好處。請詳細說明並解釋這些應用程序如何相互關聯。 – 2012-08-01 16:47:49
@DavidWasser你是絕對正確的。它們在兩個獨立的進程中運行,因此從getApplication()返回靜態實例對我沒有任何好處。對於應用程序包名稱不同,您也是對的,但這與此處不相關,因爲共享庫項目的包名稱是相同的。任何想法如何在**實時**(即不是通過緩慢的共享偏好,而是通過更快的RAM)在不同的過程中追蹤它?如果您發表評論作爲答案,我會接受它。 – ateiob 2012-08-01 20:55:44