はい、はい。:)
静的フィールド。Static フィールドを過度に使用すると、多くの問題が発生します。それらは興味深いマージンでアクセスが遅くなるだけでなく、Android によって一晩で破壊される傾向があり、通常、あちこちの参照をチェックしたり、getter/setter をif (sSomeStatic == null) { return new SomeStatic()}
. (たとえば) ApplicationData と呼ばれるクラスへの静的参照を保存しても問題ありません。いくつかの値を保存する場所です。時々、いくつかのグローバルが必要ですが、それを悪用するのは簡単なので、新しい Android を検査するたびに眉をひそめます。開発者のソースコード。
はい、Application インスタンスをシングルトン パターンに保存して使用しますが、できるという理由だけで Application 実装に 200 個の静的フィールドを追加しないでください。YOURAPP.getInstance().SomeLazyValueYouAddedHere();
それは悪いことです。これは悪い慣行につながり、ハード参照にアクセスする優れた設計よりも遅くなります。
私は永遠に続けることができますが、これについては StackOverflow で多くの議論が行われています (一部は白熱しています!)。あなたがここにいるのなら、あなたは経験を求めていると思います。私はさまざまなプロジェクトで数年間 Android を使用してきましたが、私の経験では常に、スタティックが少ないほど良いということがわかりました。
今コンテキスト… ああ、コンテキスト。Context をハード参照に保存しないでください。または、メモリリークが発生します。アクティビティには、View やその他のさまざまなものへの参照があります。コンテキストを保存すると、アクティビティが保存され、そこから事態が悪化します。コンテキストを渡す方法を学び、可能な限りアプリケーション コンテキストを使用し、渡す必要がある場合は、非常に正当な理由でそれを行います。ほとんどの場合、アプリ コンテキストはリソースや文字列などを取得するのに十分です。コンテキストを保存する場合は、常にcontext.getApplicationContext();
静的なアクティビティ コンテキストを保存しないでください。これもグーグルで検索でき、StackOverflowにはいくつかの良い答えがあります。
Android ブックを 1 冊だけ買う余裕がある場合は、BNRブックを入手してください。Android はときどき新しい SDK をリリースする可能性がありますが、概念は完全に有効であり、作成者が使用するパターンは、アクティビティ、コンテキスト、フラグメントなどを処理する正しい方法です。
更新アプリケーションは次のようになります。
public class YourApp extends Application {
private static YourApp sInstance;
public YourApp() {
super();
sInstance = this;
}
public static YourApp getInstance() {
return sInstance;
}
}
その場合、はい、同じアプリ コンテキストへの同じ静的参照を取得しています。