Это аннотация @TargetApi только для одного уровня Api или выше?

Я использую @TargetApi (23) в своем приложении.

@TargetApi(23)
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        onAttachToContext(context);
    }


    @SuppressWarnings("deprecation")
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            onAttachToContext(activity);
        }
    }

    protected void onAttachToContext(Context context) {

    }

Но я ничего не могу понять: аннотация @TargetApi (23) означает "только для уровня Апи 23" или "для уровня Апи 23 и выше"? Например, если уровень Api устройства 24, это метод onAttach (контекстный контекст), который называется?

Ответ 1

TargetApi аннотация предназначена только для целей инструмента линта и не имеет результатов во время выполнения. Если вы используете какие-либо методы API, доступные только 23 в вашем методе и не объявляете TargetApi, вы просто получите некоторые предупреждения о том, что вы используете API, недоступный в вашей минимальной версии SDK. Это ваша обязанность называть этот метод, при условии, что он знает об уровне API, от которого он будет вызван.

Ответ 2

@TargetApi не запрещает запуск кода, все, что он делает, это удаляет ошибки ворса.

Вам все еще нужно добавить что-то вроде

if (Build.VERSION.SDK_INT > 7){
    //...
}