最近、シングルトンとして使用するためにアプリケーション クラスを拡張することは悪い習慣であると言われましたが、説明はありませんでした。
では、このクラスの使用の背後にある潜在的な問題は何ですか? 多くのプロジェクトで使用されているのを見てきました。
また、アプリケーション クラスを使用するのが悪い考えである場合、アプリケーション レベルの変数を格納する代替手段は何ですか?
シングルトン アプローチを使用することは実際には悪い考えではありませんが、1 つのスレッドが値を変数に設定し、別のスレッドがその値を予告なしに上書きする可能性があるマルチスレッド環境で使用される場合には、問題になる可能性があります。 .
ただし、アプリケーション レベルのインスタンス/変数を保持するために、クラスを拡張し、 AndroidManifest.xmlでデフォルトとして定義することをお勧めします。アプリケーションのコンテキストは、そのアプリケーションを起動するときに (アプリケーションが実行されてメモリに残るまで) 1 回だけ作成されるため、そのクラス内でいくつかの変数を定義して、パブリック メソッドを使用してアプリケーションのコードのどこでも使用できるようにすることができます。Application
さらに、起動時に一度だけ作成されることが保証されているため、アプリケーションクラスをシングルトンとして使用することもできます。
シングルトン クラスを使用し、クラスを拡張する際の問題はApplication
、アプリケーション プロセスが強制終了された場合 (アプリがバックグラウンドで長時間放置されている場合に発生する可能性が非常に高い)、オブジェクトがすべてのデータを失うことです。
ただし、Application
アプリがフォアグラウンドにある場合、またはバックグラウンドにあまりとどまらない場合 (ただし、100% リスクがないわけではありません) には、クラスの使用が適切なオプションになる場合があります。
別の方法として、データを に保存することもできSharedPreferences
ます。オブジェクトがより複雑な場合は、database
.
別のオプションは、たとえばApplication
、プラスの両方の使用を組み合わせることです。SharedPreferences
最初にインスタンスから変数を取得しようとします。Application
変数が null の場合は、から取得しますSharedPreferences
。