2011-10-28 7 views
0

リモートサービスを作成しました。このリモートサービスでは、私はシングルトンオブジェクトを作成しています。作成したオブジェクトは、そのゴミが収集されるまで保持されます。今、私はシングルトンクラスの中からこのオブジェクトにアクセスするとき、私は正しいオブジェクトを取得します。しかし、私はそれを外部クラスからアクセスしているときにそれはシングルオブジェクトはnullであり、私のクラスは再び作成されています。私はすべての初期化されたオブジェクトを失っています。私は、オブジェクトがガベージコレクトされますかどうかを確認するためにシングルトンクラスで確定オーバライドしようとしたが、それはその機能に来るdoes notのリモートサービスからシングルトンクラスを作成するandroid

class myFactory { 

    private static myFactory instance; 

    private myFactory(){ 
    } 

    public static myFactory getInstance(){ 
     if(instance == null) { 
      instance = new myFactory(); 
     } 
     return instance; 
    } 
} 

を次のように

私のシングルトンクラスです。

このシングルトンオブジェクトにアクセスするコネクションファクトリオブジェクトの外側では、nullが返されるため、新しいオブジェクトが作成されます>何が間違っているのですか?

+0

誰かがあなたにnullを取得していると言っていますか? nullを取得することはできません。あなたは新しいインスタンスを得ることを意味しますか? –

答えて

0

これはシングルトンであり、なぜ動作しないのかわかりません。しかし、私はシングルトンをIPCコンテキストのようなもので使用しようとしていると思います。それは問題です(遠隔サービスは常に新しいスレッドです)。

質問:あなたはなぜシングルトンを必要としますか?より良いソリューションはありませんか?あなたのサービス構造全体を知りませんが、サービスにバインドしている間にFactoryのインスタンスを取得するのは理にかなっています。

さらに詳しい情報をお伝えできれば助かります

+0

すばらしい返信をいただきありがとうございました。私はSingleton bcosが必要です。クラスのいずれかでアクセスできるはずのオブジェクトをいくつか作成します。これは工場パターンオブジェクトの一種です。このオブジェクトが破壊されたときにのみ、新しいオブジェクトを作成したかったのです...ファクトリオブジェクトは、いくつかのワーカークラスによって使用されるアクティビティでは使用されません。 –

+0

構造はサービスのような活動であり、サービスはファクトリオブジェクトを作成します。ファクトリオブジェクトのメンバは、ネットワークレイヤのようなアプリケーションの下層で使用されます。 –

+0

サービスは同じスレッドで実行されますか?もしそうでなければ、すべてのスレッドに独自のクラスローダがあるという問題があります。つまり、シングルトンが動作しないのです。 おそらく、あなたはおそらくANRを避けるためにすべてのものを別のスレッドで実行するので、最も安全な方法である工場からサービスを入手することも考えてください。 - [バインドされたサービスのヒント](http://developer.android .com/guide/topics/fundamentals/bound-services.html) –