2012-02-07 74 views
1

我怎麼能寫單身人士通過幾個進程工作?可能嗎? 例如,我的代碼可以在Android中使用Remote Service。我怎麼能爲此寫單身人士?單身人士通過幾個進程?

+0

沒有正確地得到您的問題。 – Lucifer 2012-02-07 12:38:29

+0

是否可以在Android中爲幾個進程編寫Singleton類? – user1074896 2012-02-07 12:39:52

+0

http://groups.google.com/group/android-developers/browse_thread/thread/abe59add03ae4ce3 但我需要只有一個singleton.Is這可能嗎? – user1074896 2012-02-07 12:41:42

回答

-2
public enum MySingleton { 
    SOLE; 
    //all class stuff 
} 

這是一個簡單的書寫,懶惰和線程安全的單例。您可以直接使用MySingleton.SOLE或將它放到其他變量中,但它們全部只會引用僅一個實例。您可以根據需要在多個進程中使用它,它可以全部處理它們。 (在Android的過程線程真的)

這不是我的想法,它是從Effective Java, Second Edition

至於使用全局數據(把那要求進入正題,請),你可以從各處達到MySingleton.SOLE。靜態常量是全局的。當然,名字是你的。

當然,任何事情都有其解決方法。你可以通過類加載來欺騙這個單例。

如果你真的想有幾個不同的任務,不是線程一個實例,那麼最簡單的辦法將單建爲Hybernate或其他ORM對象。所有進程將在同一個表中看到具有相同數據的同一行。但我認爲這對你的任務來說是過度的。

+2

我需要一個類來製作可以在多個進程中使用的單例。 但是,當我打電話給我的單身人士的getInstance()方法,我得到我的單身人士的新實例 – user1074896 2012-02-07 12:45:37

+0

請仔細閱讀我的答案。它不是階級,它是枚舉!絕對不可能再製造SOLE的第二個例子。 – Gangnus 2012-02-07 12:46:24

+0

我需要一個類爲Singleton而不是枚舉。如何在枚舉中存儲一些全局數據?提前致謝。 – user1074896 2012-02-07 12:49:38

3

這個線程是老了,但目前接受的答案是錯誤的,誤導一些人,所以在這裏我們去。

服務在Android中可以使用相同的工藝爲您的應用程序,或者不同的進程完全運行。

如果這是你自己的應用程序供其內部使用定義的服務,它可能是在同一個進程中運行。只是不要設置任何processattributes on the Manifest。在這種情況下,您的服務將在主線程或某些後臺線程上運行其任務,並將與您的其他應用程序共享相同的單例實例。

如果這是一個真正的遠程服務在一個單獨的進程中運行,或一個單獨的應用程序,那麼你正在努力實現的多,困難得多。每個進程都有自己的單例實例,它們彼此之間沒有任何關係。這是非常有意義的,一旦你意識到不同的進程甚至可能不會運行相同版本的代碼。

如果你真的想跨進程有一個公共對象(提示:你幾乎肯定沒有),你需要爲它的數據創建一個共享內存空間,並實現一些同步手段。我敢肯定,科目的完整大學講座。