跨多个Android版本实现SharedPreferences

时间:2011-11-04 20:00:34

标签: android backwards-compatibility

对于我的应用程序,我有SharedPreferences的自定义实现。

在API级别9中,apply方法已添加到SharedPreferences.Editor接口。

但是,如果我将该方法添加到我的实现并尝试使用它,Android 1.6会抛出VerifyError

以向后兼容的方式使这项工作的最佳方法是什么?

编辑:

我应该澄清我的难题。在我切换到Gingerbread之前,我的SharedPreferences.Editor实现不包含apply方法。切换目标后,由于我的实现中缺少该方法,因此停止编译。

添加该方法的实现修复了编译问题,但又添加了一个新问题:Android 1.6甚至不会加载该类,抛出VerifyError。即使我发现错误,我的自定义实现也永远不会加载到1.6。

到目前为止,我最好的想法是让我自己的接口与SharedPreferences和SharedPreferences.Editor相同,并实现它们。当然,这需要在我的代码中进行彻底的更改,所以我尽量避免使用它。

1 个答案:

答案 0 :(得分:6)

如果您愿意放弃Android 1.x支持,您可以将其置于if ()测试中,类似于:

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.GINGERBREAD) {
    editor.apply();
}
else {
    editor.commit();
}

但是,如果你真的需要支持回到Android 1.6,你需要在一个只在新API设备上加载的类中隔离新的API代码,即所谓的“条件类加载”技术。

Here is a sample project演示使用此技术解决您的问题。