Does this snippet cause an infinite loop or other?
<p>Only on old android devices (2.x) I've a crash caused by stackoverflow everytime I rotate emulator. If I comment "preferenze()" emulator does not crash but app does not keep new settings. Can this code create an infinite loop? Is a incorrect code? What should be to runs correctly? Thanks!</p>

<pre><code>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) {
</code></pre>
