Является ли проверка SDK_INT достаточной или требует ленивой загрузки для использования новых API-интерфейсов Android? Зачем?

Код, например:

    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 (методов) безопасен в API 8 (Froyo) и выше или случаи, когда по-прежнему нужна ленивая загрузка?

Какие изменения в Dalvik сделали возможным?

Похожие

Ответ 1

выдает предупреждение в Froyo

Это совершенно нормально.

Но я понимаю, что в старых устройствах это будет RuntimeError, который прервал бы приложение

Для Android 1.x, да.

Таким образом, этот способ условного вызова нового API (методов) безопасен в API 8 (Froyo) и выше

Да.

Какие изменения в Dalvik сделали возможным?

Он больше не "не работает быстро", когда сталкивается с неопознанным символом, но вместо этого ждет, чтобы попытаться снова решить его, когда выполняется оператор. Проверяя SDK_INT и убедитесь, что оператор не выполняется, вы не сработаете.