2

代码如:

    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD)
        ed.apply();
    else ed.commit();

在 Froyo 中产生警告:

04-27 03:40:35.025: W/dalvikvm(3138): VFY: 无法解析接口方法 219: Landroid/content/SharedPreferences$Editor;.apply ()V

但我知道,在旧设备中,这将是一个 RuntimeError,它会中止应用程序(参见此处此处)。

那么这种在 API 8(Froyo)及更高版本中有条件地调用新 API(方法)的方式是否安全,或者在某些情况下仍然需要延迟加载?

Dalvik 的哪些变化使这成为可能?

有关的

4

1 回答 1

4

在 Froyo 中产生警告

这是完全正常的。

但我知道在旧设备中这将是一个 RuntimeError 会中止应用程序

对于 Android 1.x,是的。

在 API 8 (Froyo) 及更高版本中,这种有条件地调用新 API(方法)的方式也是安全的

是的。

Dalvik 的哪些变化使这成为可能?

当遇到无法识别的符号时,它不再“快速失败”,而是在执行语句时等待再次尝试解决它。通过检查SDK_INT并确保该语句未执行,您不会崩溃。

于 2013-11-28T17:18:37.020 回答