2012-04-14 4 views
5

registerOnSharedPreferenceChangeListenerと私のアクティビティに私のSharedPreferencesを登録しました。異なるサービスで実行中のSharedPreferencesサービスで保存されたデータを変更すると、onSharedPreferenceChangedは呼び出されません。registerOnSharedPreferenceChangeListenerが異なるプロセスで行われた変更に対して機能していません

アンドロイドコールをするにはどうすればいいですかonSharedPreferenceChanged

+0

最高のそれを説明して... はまた、この [http://stackoverflow.com/questions/3799038/onsharedpreferencechanged-not-firedをチェック別々の変化が生じた場合] [1] [http://stackoverflow.com/questions/2542938/sharedpreferences-onsharedpreferencechangelistener-not-being-called-consistently/3104265#3104265] 2] [1]:http://stackoverflow.com/questions/3799038/onsharedpreferencechanged-not-fired-if-change-occurs-in-separate-activity [2]:のhttp:// stackoverflowの.com/questions/2542938/sharedpreferences-onsharedpreference変更リスト - 一貫していない/ 3104265#3104265 – San

答えて

15

おそらく、gcによってガベージコレクションされている可能性があります。私は以前この問題に直面してきました。リスナーへのハードリファレンスを保持するグローバル変数を作成します。

OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
     public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
     // Implementation 
     } 
    }; 

SharedPreferences.onSharedPreferenceChangeListener not being called consistentlyの答えがより多くの情報が必要

+0

私はこれをやろうとしましたが、まだ動作していません!私が同じプロセスで動作するように私のサービスを変更すると、すべて正常に動作します.....私はonChangeListenerが他のプロセスによって行われた変更を検出できないと思います。 –

+1

このリスナーは、その文脈で作成されるように作成されます。他のプロセスで別のリスナーを実装する必要があるかもしれません。 – Akhil

+0

他のプロセスでリスナーを実装した後、どのようにして現在のビューをリフレッシュしますか?他のプロセスで、現在のアクティビティとonChangeListenerとの相互作用を意味しますか? –

関連する問題