1

この問題に関する説明を見つけようとしましたが、何も見つかりませんでした。

バックグラウンドで動作しているリモート サービスがあります。このサービスは、SharedPreference からいくつかの設定を読み取ります。

私が抱えている問題は、PreferenceActivity (アクティビティとサービスが同じアプリケーションと同じパッケージに属している) から設定を変更したときに発生します。設定を変更すると正しく保存されますが、サービスがその設定を読み取るとすぐに (サービスは設定を変更することはなく、PreferenceActivity から変更できないいくつかの内部設定のみを変更します)、設定は「リセット」され、サービスはリセットされた値を取得します。

これは CheckBoxPreference で発生しています。私はそれらを持っていないので、これが他の種類の設定で起こるかどうかはわかりません。

設定を変更した後、サービスを再起動する必要がありますか? または、サービスの設定を「更新」する必要がありますか? これは、HoloEverywhere の使用に関連する問題でしょうか?

SharedPreference オブジェクトを取得するには、次のコードを使用します。

PreferenceManager.wrap(context, getSharedPreferencesName(context), Context.MODE_MULTI_PROCESS);

このコードは HoloEverywhere に固有のもので、次のようになります。

context.getSharedPreferences(getSharedPreferencesName(context), Context.MODE_MULTI_PROCESS);

「getSharedPreferencesName()」は、「package.name_preferences」で構成された文字列を返すだけです。

ありがとうございました。

4

1 に答える 1

3

バックグラウンドで動作しているリモート サービスがあります。

サービスをリモートにした理由は何ですか?

設定を変更すると正しく保存されますが、サービスがその設定を読み取るとすぐに (サービスは設定を変更することはなく、PreferenceActivity から変更できないいくつかの内部設定のみを変更します)、設定は「リセット」され、サービスはリセットされた値を取得します。

これは、サービスをリモートにしたためです。マニフェストから属性を削除するだけandroid:processで、すべてのコンポーネントが同じプロセスで実行され、この問題はなくなります。その過程で、RAM とバッテリーをあまり消費しないので、ユーザーをより幸せにすることができます。

設定を変更した後、サービスを再起動する必要がありますか? または、サービスの設定を「更新」する必要がありますか?

リモート サービスを利用する正当な理由が本当にある場合 (個人的には、私が自然に髪を再生する可能性が高くなります)、サービスのプロセスを再起動する必要があります。プロセスごとにキャッシュされ、プロセスを再起動する以外に Android を強制的にディスクSharedPreferencesからリロードする方法がわかりません。SharedPreferences

または、リモート サービスを使用できませんでした。選択はあなた次第です。

于 2012-11-09T00:29:22.153 に答える