Является ли проверка 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
и убедитесь, что оператор не выполняется, вы не сработаете.