[解決済み] Androidにおけるシングルトン vs. アプリケーションコンテキスト?
質問
思い出すこと シングルトンを使用する際のいくつかの問題点を列挙した記事 Androidアプリケーションでシングルトンパターンを使っている例をいくつか見ましたが、グローバルなアプリケーションの状態(android.os.Applicationをサブクラス化してcontext.getApplication()で取得)を通じて共有するシングルインスタンスの代わりにシングルトンを使用することは良い考えなのか疑問に思います。
両方のメカニズムにはどのような利点/欠点があるのでしょうか?
正直なところ、私はこの記事と同じ答えを期待しています。 Webアプリケーションでシングルトンパターン、いいアイデアではない!? が、Androidに適用される。正しいですか?それ以外のDalvikVMでは何が違うのでしょうか?
編集部:いくつかの点を絡めてご意見を伺いたいと思います。
- シンクロナイゼーション
- 再利用性
- テスティング
どのように解決するのですか?
Dianne Hackbornの回答には、とても同意しかねます。私たちは、実際に必要なときに簡単に再作成できる軽量でタスクスコープ付きのオブジェクトを採用するために、プロジェクトからすべてのシングルトンを少しずつ削除しています。
シングレットはテストにとって悪夢のような存在で、いい加減に初期化すると
状態不確定性。
の呼び出しを移動させると、突然表面化することがあります)。
getInstance()
をあるスコープから別のスコープへ移動させる)。もう一つの問題として、可視性が挙げられます。
グローバル(=ランダム)
共有状態にアクセスできるため、並行アプリケーションで適切に同期されていない場合、微妙なバグが発生する可能性があります。
私はこれをアンチパターンだと考えています。本質的にグローバルな状態を維持することになる、悪いオブジェクト指向のスタイルなのです。
質問に戻ります。
アプリコンテキストはシングルトンそのものと言えますが、フレームワークで管理され、明確に定義された ライフサイクル スコープ、およびアクセスパスがあります。したがって、もしアプリのグローバルな状態を管理する必要があるなら、それはここに置くべきで、他のどこにも置くべきではないと私は考えています。それ以外の場合は、次のことを再考してください。 本当に あるいは、シングルトン・クラスを書き換えて、タスクを実行する小さな短命のオブジェクトをインスタンス化することも可能でしょう。
関連
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
IDEA パッケージステートメントの欠落
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] Androidで'Context'を取得する静的な方法?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
final, finally, finalizeの違いについて話してください。
-
Dateが型に解決できない問題を解決する
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
Methodのinvokeメソッド実装のJavaリフレクション
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
JSPで「リストが型解決できない!」の解決方法
-
[解決済み】アクティビティコンテキストまたはアプリケーションコンテキストを呼び出すタイミングは?