私はAndroid版の最初のライブ壁紙をリリースしました。私は携帯電話やいくつかの友人の携帯電話で問題を発見せずにバグをテストしましたが、ユーザーが設定を変更しようとすると、再帰的なループに陥ってスタックオーバーフローエラーが発生するようです。onSharedPreferenceChangedは、一部のAndroid搭載端末でスタックオーバーフローを引き起こしています
私はいくつかの他の永続化された値を変更する必要がある特定の "テーマ"設定があるので、問題が発生していると思います。たとえば、あるテーマではデフォルトの色、スピード、背景などが設定されます。これらの値をEditor.commit()でプログラムで保持すると、onSharedPreferenceChangedをもう一度、もう一度呼び出しているようです...
これはライブ壁紙です、私は透明な設定画面の背後にあるプレビューを持っています、そして、私はそれが作られているように設定の変更を反映する必要があります。私はまた、スライダ/カラーピッカー/リストの設定をユーザが直接変更したり、 "テーマ"を選択したときにプログラムによって変更したものを反映する必要があります。これを行う最も簡単な方法は、onSharedPreferenceChangedの設定エディタでそれらを変更するように思えました。実際、これは多くのデバイスで機能します。
すべてのデバイスで動作させるにはどうすればよいですか?
がここに関連するコードです:
public void onSharedPreferenceChanged(SharedPreferences prefs, String key)
{
if(key != null)
{
SharedPreferences.Editor editor = prefs.edit();
hue = prefs.getInt("color", 0);
BG_COLOR = prefs.getInt("background_color", 0);
//etc...
if(key.matches("plasma_set"))
{
plasmaAtlasName = atlasName;
editor.putString("atlasName", atlasName);
//load each bolt set with defalut values
if(plasmaAtlasName.equals("plasmaAtlas11"))
{
hue = 180;
editor.putInt("speed", 10);
editor.putInt("bolt_density", 2);
BG_COLOR = 0;
editor.putInt("background_color", BG_COLOR);
editor.putInt("color", hue);
}
if(plasmaAtlasName.equals("plasmaAtlas9"))
{
hue = 330;
editor.putInt("speed", 10);
editor.putInt("bolt_density", 2);
BG_COLOR = 0;
editor.putInt("background_color", BG_COLOR);
editor.putInt("color", hue);
}
//etc...
}
editor.commit();
}
}
いくつか例を挙げてください。 – nAkhmedov