gpt4 book ai didi

java - 此代码段是否会导致无限循环或其他?

转载 作者:行者123 更新时间:2023-11-29 05:50:03 25 4
gpt4 key购买 nike

仅在旧的 android 设备 (2.x) 上,我每次旋转模拟器时都会因 stackoverflow 导致崩溃。如果我评论“preferenze()”,模拟器不会崩溃,但应用程序不会保留新设置。这段代码可以创建一个无限循环吗?是一个错误的代码?应该怎样才能正确运行?谢谢!

private boolean preferencesChanged;

public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

private void preferenze() {

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

CheckboxPreference = prefs.getBoolean("checkboxPref", true);
ListPreference = prefs.getString("listpref", "");
numeronotifiche = prefs.getString("notify", "");
Sound = prefs.getString("sound", "");
barranotifiche = prefs.getBoolean("keep", false);
natura = prefs.getBoolean("suoninaturasino", false);
snatura = prefs.getString("suoninaturascelta", "");
snaturaold = prefs.getString("snaturaoldvalue", "");

if (snaturaold != snatura){
stopService(new Intent(this, UnUsedService.class));

}

SharedPreferences prefs2 = getSharedPreferences(PRIVATE_PREF, 0);

Editor editor10 = prefs2.edit();
editor10.putString("snaturaoldvalue", snatura);
editor10.commit();

// suoni attivati (o no)

if (natura){
startService(new Intent(this, UnUsedService.class));
}
else {
stopService(new Intent(this, UnUsedService.class));
}

if (barranotifiche){
showNotification();
}
else {
cancelNotification();
}

GestioneAllarme alarm = new GestioneAllarme();
if (CheckboxPreference){
if (numeronotifiche.equals("3")){
alarm.CancelAlarm(this);
alarm.SetAlarm3(this);
}
else if (numeronotifiche.equals("1")){
alarm.CancelAlarm(this);
alarm.SetAlarm1(this);
}
else if (numeronotifiche.equals("2")){
alarm.CancelAlarm(this);
alarm.SetAlarm2(this);
}
else {
//
}
}
else {
//
GestioneAllarme alarm2 = new GestioneAllarme();
alarm2.CancelAlarm(this);
}

//
if (Sound.equals("")){
Sound = "2";
Editor editor = prefs.edit();
editor.putString("sound", "2");
editor.commit();
}


if (ListPreference.equals("")){
ListPreference = "1500";

Editor editor = prefs.edit();
editor.putString("listpref", "1500");
editor.putInt("indexfade", 1500);
editor.commit();

}

if (numeronotifiche.equals("")){
numeronotifiche = "2";
Editor editor = prefs.edit();
editor.putString("numeronotifiche", "2");
editor.commit();
}


fade = Integer.parseInt(ListPreference);
notify = Integer.parseInt(numeronotifiche);

if (fade == 500){
animazione = R.style.MyCustomTheme1;
fadein = R.anim.fadein500;
fadeout = R.anim.fadeout500;
}
else if (fade == 1000){
animazione = R.style.MyCustomTheme2;
fadein = R.anim.fadein1000;
fadeout = R.anim.fadeout1000;
}
else if (fade == 1500){
animazione = R.style.MyCustomTheme3;
fadein = R.anim.fadein1500;
fadeout = R.anim.fadeout1500;
}
else if (fade == 2000){
animazione = R.style.MyCustomTheme4;
fadein = R.anim.fadein2000;
fadeout = R.anim.fadeout2000;


@Override
protected void onResume() {
super.onResume();
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
preferencesChanged = true;
}
};
sp.registerOnSharedPreferenceChangeListener(listener);

protected void onStop(){
super.onStop();


if(preferencesChanged){
//Update the app
preferenze();
}
}


public class Preferences extends PreferenceActivity implements OnSharedPreferenceChangeListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.preferences);

}

@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String listpref) {

最佳答案

似乎一旦 preferenze() 总是修改共享首选项,您就会陷入无限循环。

由于您没有发布完整的代码,所以很难说。但我猜你的代码是这样的,它总是只在 android 2.x 上修改首选项

你可以尝试这样的事情来避免无限循环。

private boolean isPreferenzeRunning = false;
...
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String listpref) {
if(!isPreferenzeRunning)preferenze();
}
};
...
private void preferenze()
isPreferenzeRunning = true;
try{
...
}finally{isPreferenzeRunning = false;}
}

关于java - 此代码段是否会导致无限循环或其他?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14258016/

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