gpt4 book ai didi

android - 在 OnSharedPreferenceChangeListener() 中使用 commit()

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:09 25 4
gpt4 key购买 nike

我正在使用 OnSharedPreferenceChangeListener():

listener=new SharedPreferences.OnSharedPreferenceChangeListener() {

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if(key.equals("TIME"))
{
Log.v("Tagger","Value has changed");
long L=-2;
if(sharedPreferences.contains("TIME"))
{
L=sharedPreferences.getLong("TIME", 0);
long HH=(L/1000)/3600;
long MM=((L/1000)/60)%60;
long SS=(L/1000)%60;
MILLIS-=1000;
mainHH.setText(Long.toString(HH));
mainMM.setText(Long.toString(MM));
mainSS.setText(Long.toString(SS));
}
if(L<=0)
{
Editor edit=sharedPreferences.edit();
edit.remove("TIME");
edit.commit();

Log.v("VALUE",Long.toString(454L));
Intent intent = new Intent(getApplicationContext(), TimerAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
TimerAlarmReceiver.alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
TimerAlarmReceiver.alarmMgr.cancel(pendingIntent);
start.setText("Start the Test?");
TimerOn=false;

edit.putBoolean("TimerOn", TimerOn);
edit.commit();
}
}
}
};
sharedPreferences.registerOnSharedPreferenceChangeListener(listener);

不将对 commit 的调用放在监听器中是合乎逻辑的,因为它会变得递归并导致 StackOverflow。但我不明白的是为什么这段代码在更高版本的 android 上运行良好(在 >4.X 上测试)。但是当我在 android 2.3 上使用它时,它会导致预期的错误。

我如何:

  1. 让它在旧版本的 android 上运行 或者
  2. 添加一个异常,当我在其中调用 commit() 时不触发监听器?

最佳答案

您始终可以通过使用基本情况 来避免无限循环问题的递归。 base case 的功能是在您的应用达到特定的预定义状态时停止递归。

在您的情况下,您可以使用以下解决方案之一:

1) 当您的跳过条件发生时取消注册 OnSharedPreferenceChangeListener

sharedPreferences.unregisterOnSharedPreferenceChangeListener(listener);

2) 在你的 class 中创建一个全局 bool 值 flag 并在 OnSharedPreferenceChangeListener 中执行你的逻辑之前检查它并用 设置它>false 当您达到您的基本情况

private boolean changesFlag = true; 

关于android - 在 OnSharedPreferenceChangeListener() 中使用 commit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25218934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com