код, такой как:Проверяет 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/содержание/SharedPreferences $ Editor; .Не() V
Но я понимаю, что в более старых устройствах это будет RuntimeError, который бы прервать программу (см here и here).
Таким образом, этот способ условного вызова новых API (методов) безопасен в API 8 (Froyo) и выше или случаи, когда по-прежнему нужна ленивая загрузка?
Какие изменения на Dalvik сделали это возможным?
Связанные
- Android recommended way of safely supporting newer apis has error if the class implements a newer interface. Why?
- Android solving compatibility with SDK_INT hack; is this ok?
- Android Dalvik Verification in Eclair
Изменения, которые сделали возможным, это переход от немедленного отказа от класса, заметив какую-либо проблему в режиме, когда некоторые проблемы являются фатальными, а другие приводят к встроенной инструкции «бросить всегда». Это подробно описано в http://milk.com/kodebase/dalvik-docs-mirror/docs/verifier.html. – fadden
Помимо использования отражения, существует ли способ подавить предупреждение о регистрации? – scottt
Так что, кроме использования отражения или внутренних классов, существует ли способ подавить сообщение журнала? – scottt