2012-02-07 14 views
1

シングルトンをいくつかのプロセスで処理する方法を教えてください。出来ますか? たとえば、Androidのリモートサービスで動作するコードがあります。この目的のためにシングルトンを書くにはどうすればいいですか?シングルトンからいくつかのプロセス?

+0

質問が正しく表示されません。 – Lucifer

+0

Androidでいくつかのプロセスにシングルトンクラスを書くことは可能ですか? – user1074896

+0

http://groups.google.com/group/android-developers/browse_thread/thread/abe59add03ae4ce3 しかし、私はシングルトンを1つだけ持つ必要があります。可能でしょうか? – user1074896

答えて

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

これはシンプルに書かれた、怠惰でスレッドセーフなシングルトンです。 MySingleton.SOLEを直接使用することも、他の変数に入れることもできますが、それらはすべて1つのインスタンスへの参照にすぎません。あなたはあなたが望むように多くのプロセスでそれを使うことができます。それはEffective Java, Second Edition

から使用してグローバルデータについてである、

それは私の考えではありません(アンドロイドの処理はスレッドが実際にある)(質問にその要件を入れて下さい)、あなたはどこからでもMySingleton.SOLEに達する可能性があります。静的定数はグローバルです。もちろん、名前はあなたのものです。

もちろん、どのようなものでも回避策があります。あなたはクラスローディングによってこのシングルトンをだますことができます。あなたは本当に、いくつかの異なるタスクではなく、スレッドのための1つのインスタンスを持つようにしたい場合は

は、その後、簡単な解決策は、シングルトンHybernateまたは他のORMオブジェクトとして構築されます。すべてのプロセスは、同じデータを持つ同じテーブル内に同じ行を表示します。しかし、私はそれがあなたの仕事の過労だと思う。

+2

私はいくつかのプロセスで使うことができるシングルトンを作るためにクラスが必要です。 しかし、私のシングルトンのgetInstance()メソッドを呼び出すと、私のシングルトンの新しいインスタンスを取得しています – user1074896

+0

私の答えを注意深く読んでください。それはクラスではありません、enumです! SOLEの2番目のインスタンスを作成することは絶対不可能です。 – Gangnus

+0

私は、列挙ではなくシングルトンになるためにクラスが必要です。グローバルデータを列挙型で保存するにはどうすればよいですか?事前に感謝します。 – user1074896

3

このスレッドは古いですが、現在の受け入れ答えが間違っていると一部の人が誤解であるを参照してください。

Androidでのサービスは、アプリと同じプロセスで実行しても、別のプロセスで実行してもかまいません。

これは、内部で使用するために自分のアプリケーションによって定義されたサービスである場合、おそらく同じプロセスで実行されている可能性があります。 processattributes on the Manifestのいずれも設定しないでください。その場合、サービスはメインスレッドまたはいくつかのバックグラウンドスレッドでタスクを実行し、同じシングルトンインスタンスを他のアプリケーションと共有します。

これは別のプロセスで実行されている真のリモートサービス、または別のアプリケーションであれば、何を達成しようとしていることは、はるかに難しいくらいです。各プロセスは、シングルトンの独自のインスタンスを持ち、互いに関連するものではありません。これは完璧な意味を持ちます。いったん異なるプロセスが同じバージョンのコードを実行していないことが分かったら、これは理にかなっています。

実際にのプロセス間で共通のオブジェクトを持ちたい場合(ヒント:ほとんどの場合はそうではないでしょう)、そのデータ用に共有メモリスペースを作成し、いくつかの同期手段を実装する必要があります。私は確信しているその大学のフル講義は件名です。

関連する問題