2011-07-13 5 views
2

ファイルを読み込んで静的変数に格納する必要があります。アンドロイドシングルトンとスタティックメソッド

ほとんどのアクティビティでは、ロードメソッドとゲッターメソッドが必要です。

私はメソッドを静的にしようとしていましたが、一部のブロガーはそれを気に入らなかった。

私の両方のアプローチの主な長所と短所は次のとおりです。

シングルトン

利点:多型を維持する能力。

欠点:すべてのアクティビティでgetInstantaceメソッドを呼び出す必要があります。

静的メソッドはその逆です。

2つの方法のいずれかを選択する際に私を案内してください。

ご協力いただければ幸いです。

答えて

7

「何人かのブロガー」には、何か嫌いな人がいます。静的メソッドには何の問題もありません。それらのメソッドが動作するステートがメソッドのローカルであるか、各呼び出しで渡されます(同じ警告は、シングルトンのインスタンスメソッドにも適用されます)。

どちらの方法も問題ありません。いずれかの方法をお選びください。好きな方法を選んでください。経験則として、シングルトンインスタンスが実行時に潜在的に変更可能な状態を保持しない場合は、静的メソッドを使用してください。さもなければ、シングルトンが状態を保持し、ほんの一握りのユーティリティメソッドのリポジトリとして機能するのではなく、それをシングルトンにすることを意味するならば。

私が遭遇した静的メソッドを使用することに対する妥当な議論は、静的メソッドが単体テストの目的でモックアウトに問題があることです。しかし私の推測では、おそらくモックユニットテストを行っていないということです。モックオブジェクトを使ったテストの価値は、セットアップに費やされる作業の量に比例して出てくる値を見ると、テストケース。

1

シングルトンを使用することをお勧めします。 静的な欠点は、アプリケーションの起動時に常に存在することです。このオブジェクトを使用していなくても、システムからのメモリがいくらか必要になります。

+0

最初にクラスを使用したときだけでなく、アプリの起動時にも存在していますか? –

+0

それは意味をなさない。彼はファイルを静的変数にロードしています。ファイルがロードされない限り、それはメモリを消費しません。 –

+1

@Thomas:私は確かではありません、AFAIK静的変数は、クラスがロードされるときに初期化されます。しかし、タイミングクラスがロードされているかどうかわからない、それは操作dalvilk VMに依存していますか? – NguyenDat

2

適切な方法は、依存性注入を使用することです。あなたの選択肢について議論する質問hereがあります。

私の場合、シングルトンメソッドと静的メソッドは実際は同じものです。あなたはまだあなたのクラスとあなたのシングルトンとシングルトンの実装の間にタイトなカップリングを持っていると、スタティックメンバを使用しています。あなたのスタイルに最も適したものを選ぶと言います。

7

アプリが一時停止していてリソースが不足していると、AndroidがクラスからすべてのStaticデータをクリアすることがあるため、予期しないヌルポインタ例外が発生するため、AndroidではStatic変数を使用しないでください。より良い説明のためにGoogleで "Android Static Null"を検索してください。

どちらの方法(静的メソッドまたはシングルトン)でも、Androidで静的変数がクリアされた場合に備えて、アプリケーションに状態を保存して復元できることを確認する必要があります。

+1

その答えは、アンドロイド静的ヌルと、ちょうど私の一日を作った。それらの隠された脳のアップグレードのうちの1つは、あなたが見つけ出すためにただたわごとです。 – Warpzit

関連する問題