@TargetApi注释仅针对一个Api级别或更高级别吗?

cim*_*mus 26 android

我在我的应用程序中使用@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) {

    }
Run Code Online (Sandbox Code Playgroud)

但我无法理解:@TargetApi(23)注释的意思是"仅适用于Api等级23"或"适用于Api等级23及以上"?例如,如果设备24的Api级别,是onAttach(Context context)方法调用?

GoR*_*RoS 25

TargetApi注释仅用于lint工具,并且在运行时没有结果.如果您在方法中使用23中仅提供的任何API方法并且未声明TargetApi,您将收到一些警告,表明您使用的API在最低SDK版本中不可用.您有责任将此方法称为一致性,并了解将从中调用的API级别.


Yan*_*ang 8

@TargetApi 不会阻止任何代码运行,它所做的只是删除 lint 错误。

你仍然需要添加一些东西

if (Build.VERSION.SDK_INT > 7){
    //...
}
Run Code Online (Sandbox Code Playgroud)