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