0

在我的应用程序中,当手机处于纵向模式时,可以检索文件名。

当我旋转手机时,正在使用相同的文件来获取首选项,但这个特定的首选项返回空白。

我检查了我写入此首选项的一个功能,但在手机旋转时不会调用它。

sharedpreferences那么,旋转手机可能导致变化的原因是什么?

这是我使用的代码:

static String retrieveStoredFilename(Context context) {
    SharedPreferences myPrefs = context.getSharedPreferences(PREF_NAME,
            Context.MODE_PRIVATE);
    String s = myPrefs.getString(FILENAME, "");

    return TextUtils.isEmpty(s) ? (String) null : s;
}

如果有帮助,这里还有一些代码。这是来自实际上被旋转弄乱的片段。在 onResumefilename旋转后设置为null,但从那时起它为null,即使我旋转回来。

@Override
public void onPause() {
    super.onPause();
    mIV.getBitmap().recycle();
    mIV.setImageResource(R.drawable.ic_action_search);
    if (myBitMap != null)
        myBitMap.recycle();
}

@Override
public void onResume() {
    super.onResume();
    filename = ControllerFragment.retrieveStoredFilename(getActivity());
    getBitmap(filename);
    mIV.invalidate();
    }

这两个常数是:

public static String FILENAME = "filename";
public static String PREF_NAME = "photobrowser";
4

2 回答 2

1

检查应用程序的生命周期。你在 onCreate()、onPause() 等上做了什么?也许您正在清除该首选项条目。正如这所说

除非您另有说明,否则配置更改(例如屏幕方向、语言、输入设备等的更改)将导致您当前的活动被破坏,并通过 onPause()、onStop() 和onDestroy() 视情况而定。如果活动在前台或对用户可见,则在该实例中调用 onDestroy() 后,将创建该活动的新实例,使用前一个实例从 onSaveInstanceState(Bundle) 生成的 saveInstanceState。

于 2012-11-07T03:45:45.553 回答
1

我看到的唯一可能性是 FILENAME 的值没有被持久化。在 Android 上研究 ActivitySaving Activity 状态的生命周期可能是值得的。

这是 android 文档中关于Configuration Changes的一个尝试。

onPause()除非您另外指定,否则配置更改(例如屏幕方向、语言、输入设备等的更改)将导致您当前的活动被破坏,onStop()onDestroy()在适当的情况下经历正常的活动生命周期过程。如果活动在前台或对用户可见,onDestroy()则在该实例中调用一次,然后将创建活动的新实例,其中包含前一个实例从 生成的 savedInstanceState onSaveInstanceState(Bundle)

因此,您onResume()永远不会在方向改变后被调用。Activity 贯穿整个生命周期,直到onDestroy(). 在调用方向更改后,onCreate()因为它是您的活动的新实例。

于 2012-11-07T03:37:40.253 回答