57

Androidでは、静的変数を使用することをお勧めしますか?たとえば、Javaでシングルトンパターンを実装する場合、私は通常次のことを行います。

private static A the_instance;
public static A getInstance() {
    if (the_instance == null) {
       the_instance = new A();
    }
    return the_instance;
}

また、これはAndroid JVMによっていつクリーンアップされますか?

4

5 に答える 5

65

staticフィールドはClassインスタンス全体にアタッチされ、インスタンスClassLoaderはクラスをロードしたインスタンスにアタッチされます。the_instance全体ClassLoaderが回収されるとアンロードされます。これは、Androidがアプリを破棄したときに発生すると90%確信しています(バックグラウンドに入ったり一時停止したりするときではなく、完全にシャットダウンされます)。

したがって、アプリが実行されている限り、それは生きていると考えてください。シングルトンは良い考えですか?人々は異なる見解を持っています。私自身、適切に使用すれば大丈夫だと思います。Androidでは答えはあまり変わらないと思います。メモリ使用量自体は問題ではありません。大量のデータをメモリにロードする必要がある場合、データをシングルトンにカプセル化するかどうかに関係なく、それは問題であるか、そうでないかのどちらかです。

于 2010-03-19T09:30:47.757 に答える
15

静的変数は大丈夫だと思います。

これはAndroidのドキュメントが言っていることです:

http://developer.android.com/guide/appendix/faq/framework.html

単一のアプリケーション内のアクティビティ/サービス間でデータを渡すにはどうすればよいですか?

パブリック静的フィールド/メソッド

アクティビティ/サービス間でデータにアクセスできるようにする別の方法は、パブリック静的フィールドやメソッドを使用することです。これらの静的フィールドには、アプリケーション内の他のクラスからアクセスできます。オブジェクトを共有するために、オブジェクトを作成するアクティビティは、このオブジェクトを指すように静的フィールドを設定し、このオブジェクトを使用する他のアクティビティは、この静的フィールドにアクセスするだけです。

于 2010-09-03T20:00:28.143 に答える
1

他の人が言うことに反して-それは大丈夫以上です。確かに、それはそれにいくつかの構造を持っています。公式のgooglesamples/android-architectureリポジトリでは、todo-mvp-clean(MVPパターンを実装し、Clean Architectureの原則に従うTodoアプリ)で使用されます。このファイルをチェックしてください。

あなたが見ることができるのは、シングルトンゲッターを参照する多くの静的メソッドです。

最新の、エラーが発生しにくく便利な代替手段は、DaggerDIフレームワークです。

于 2019-03-23T01:31:17.560 に答える
0

使用できるメモリが限られているモバイルプラットフォームにこのようなアプローチが適しているかどうかはわかりません。言うまでもなく、アプリケーションはマルチタスク対応デバイスで実行されます。

このアプローチはデバイスからメモリを占有する可能性があると思いますが、これをサポートするドキュメントはありません。おそらく、私よりも教育を受けた人が自分の考えを共有することができます。

于 2010-03-19T09:26:31.053 に答える
-6

いいえ、しないでください。シングルトンは反パターンです!代わりに、フレームワーク( DaggerRoboguiceなど)を介して、またはインスタンス化されたオブジェクトを明示的に渡すことによって、依存性注入を使用します。

于 2010-03-19T09:31:05.240 に答える