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

android– 在OnSharedPreferenceChangeListener()中使用commit(),第1张

概述我正在使用OnSharedPreferenceChangeListener():listener=newSharedPreferences.OnSharedPreferenceChangeListener(){@OverridepublicvoidonSharedPreferenceChanged(SharedPreferencessharedPreferences,Stringkey){if(key.equals(&qu

我正在使用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);

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

我如何能:

>让它在旧版本的AndroID上运行
                     要么
>添加一个异常,当我在其中调用commit()时不激活侦听器?

解决方法:

使用基本案例总是可以避免无限循环问题的递归.基本情况的功能是在应用程序达到特定的预定义状态时停止递归.

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

1)当您使用跳过条件时,取消注册OnSharedPreferencechangelistener

sharedPreferences.unregisterOnSharedPreferencechangelistener(Listener);

2)在类中创建全局布尔标志并在OnSharedPreferencechangelistener中执行逻辑之前检查它,并在到达基本情况时将其设置为false

private boolean changesFlag = true; 
总结

以上是内存溢出为你收集整理的android – 在OnSharedPreferenceChangeListener()中使用commit()全部内容,希望文章能够帮你解决android – 在OnSharedPreferenceChangeListener()中使用commit()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1117103.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存