1

簡単な質問ですが、おそらく複雑な内容です。たとえば、次のクラスがあります。

  • ActivityA.class
  • ActivityB.class
  • ActivityC.class
  • Singleton.class

シングルトンは、シングルトンクラスパターンです。次に例を示します。

public class Singleton {
    static Singleton instance = new Singleton();
    private Singleton();

    List<HeavyObject> listaObjects;
}

私はこのシングルトンを任意のコンテキスト(アクティビティ)で使用します。

私の質問は、Androidは現在のアクティビティをリリースせずにいつでもこのクラスをリリースできますか?つまり、アクティビティBを監視していますが、Androidはクラスシングルトンを破棄(リリース)できますか、それともすべてのアプリがリリースされたときにのみクラスがアンロードされますか?

または、クラスがアクティビティのコンテキストにあるために、アクティビティが破棄された場合はどうでしょうか。

4

3 に答える 3

1

シングルトンへの未解決の参照がない場合、どの参照もnullであるため、ガベージコレクションメカニズムは、ラウンドを実行するとシングルトンを破棄します。これは、すべての参照がnullになるとすぐには破棄されない可能性が高いことを意味します。

ただし、1つのアクティビティでもシングルトンを使用している場合、そのアクティビティが破棄されない限り、リリースされません。

于 2012-12-05T21:58:01.407 に答える
1

私はあなたのSingleton.instanceが実際には静的フィールドであると仮定しています(そうでなければあなたの例はあまり意味がありません)。

その場合、シングルトンの有効期間は、アプリケーションのプロセスの有効期間に関連付けられます。プロセスの有効期間は、プロセスの最初のアクティビティが呼び出されたとき(またはプロセスが実装するサービスに対して行われた呼び出し)に開始されます。

プロセスは、すべてのプロセスアクティビティが停止した後、いつでも破棄される可能性があります。

したがって、停止されていないアクティビティがある場合、インスタンスは残ります。ただし、プロセス内のすべてのアクティビティが停止している場合、プロセスはいつでも破棄される可能性があります。アクティビティが再開され、その間にプロセスが破棄された場合は、インスタンスを再度作成する必要があります。

于 2012-12-05T22:24:26.487 に答える
-1

このビデオを見る忍耐力があれば、Androidでのメモリ管理の基本を学ぶことができます。

私はあなたにそうすることを完全にアドバイスします!

于 2012-12-05T21:57:00.897 に答える