在Activity kill

时间:2017-12-26 18:12:19

标签: java android persistence

大家好,祝大家新年快乐!

我在我的应用程序中遇到了一个奇怪的问题,我似乎无法修复。它应该是一个逻辑错误,但我无法以某种方式捕获它。

这是我的代码

public String[] str={"Disabled","Sound Quality Prefered","Bass Prefered","Battery Prefered",};
public int ThemePresetValue = 0;
private int SelectedThemePresetValue = 0;

    public void presets() {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
    alertDialog.setTitle("Select Your Sound Preset");
    alertDialog.setNegativeButton("Cancel", null);
    alertDialog.setPositiveButton("Select", themePresetDialogPositiveListener);
    alertDialog.setSingleChoiceItems(str, ThemePresetValue, PresetListListener);
    alertDialog.show();}

DialogInterface.OnClickListener PresetListListener =
        new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                SelectedThemePresetValue = which;
            }
        };

DialogInterface.OnClickListener themePresetDialogPositiveListener =
        new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                mPreset = "";
                ThemePresetValue = SelectedThemePresetValue;

                if (ThemePresetValue == 0) {
                    mPreset = "Disabled";
                } else if (ThemePresetValue == 1) {
                    mPreset = "Sound Quality Prefered";
                } else if (ThemePresetValue == 2) {
                    mPreset = "Bass Prefered";
                } else if (ThemePresetValue == 3) {
                    mPreset = "Battery Prefered";
                }

                if (mPreset.equals("Disabled")) {
                    disabler();

                } else if (mPreset.equals("Sound Quality Prefered")) {
                    SoundQPreset();

                } else if (mPreset.equals("Bass Prefered")) {
                    bassPreset();

                } else if (mPreset.equals("Battery Prefered")) {
                    batteryPreset();
                }
            }
        };

问题是,在我选择其中一个预设后,选择会一直停止,直到应用程序从多任务处理关闭(MainActivity重新启动或被杀死)。然后,如果我重新打开应用程序,对话框的选择将重新设置为0(“已禁用”)。

为什么会这样?你有解决方案吗?

2 个答案:

答案 0 :(得分:1)

由于您没有坚持用户的选择,因此选择将保留在内存中,直到活动结束。您应该使用SharedPreferences或sqlite在本地保存用户的选择!

当活动重新开始时,您可以读取保存的值并将选项设置为选中!

答案 1 :(得分:0)

是的,每次为相应的对象重新创建该字段,并且由于该对象(即活动)被破坏,所以保存该字段的存储器也被释放。因此,该领域的生命周期受到该对象的限制。为了使其连续,您最好将值保存在SharedPreferences中,或者通常在销毁活动之前将其写入某个存储空间,例如:在onPause()中,然后从onCreate()onResume()回调中的这些偏好设置中获取它。例如:

/*--- Saving ---*/

SharedPreferences prefs = 
    getApplicationContext().getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);
prefs.edit().putInt(KEY_NAME, VALUE).apply();


/*--- Retrieving ---*/

int oldValue = 
    getApplicationContext().getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE)
        .getInt(KEY_NAME, 0);

PREFERENCES_NAME是共享首选项文件的文件名。 KEY_NAME是密钥,您可以在其下保存并稍后检索存储的值。 VALUE只是保存的价值。

希望这有帮助!