SharedPreferences.Editor.apply强制关闭

时间:2011-02-16 00:01:06

标签: java android android-emulator nexus-one

我使用以下代码:

SharedPreferences.Editor edit = mPrefs.edit();
edit.putString("UUID", UUID.randomUUID().toString());
edit.commit();
//edit.apply();

这样可以正常工作,但是如果我注释掉提交并取消注释应用,则应用程序强制在我的设备上关闭,没有错误消息或抛出异常。奇怪的是,这在模拟器中运行良好,在2.2和2.3.3之下。它仅在运行2.2.1

的Nexus上关闭

我有上面的解决方法,但我对结果的原因感兴趣。

有人可以帮忙吗?

干杯,Venatu

2 个答案:

答案 0 :(得分:4)

在API级别9(a.k.a.,Android 2.3)中添加了

apply()。请勿尝试在Android 2.2上使用它。

答案 1 :(得分:0)

这很简单我就像这样使用kode:

if (respondsTo(editor, "apply")) invoke(editor, "apply”);
else editor.commit();

然后我将这两种魔术方法作为静态导入..

public static boolean respondsTo(Object object, String methodName) {
    try {
        object.getClass().getMethod(methodName, (Class<?>[]) null);
        return Yes;
    } catch (NoSuchMethodException e) {
        return No;
    }
}

public static Object invoke(Object object, String methodName) {
    try {
        return object.getClass().getMethod(methodName, (Class<?>[]) null).invoke(object);
    } catch (Exception e) {
        return INVOKE_FAILED;
    }
}

提交在阻止UI时运行,因此在保存大数据时可能会出现问题。我使用后台线程进行提交(这是有问题的......)但是现在很多用户都有2.3所以我认为旧的应该切换...