2016-04-24 58 views
7

我在我的應用程序中使用@TargetApi(23)。是@TargetApi註釋僅適用於一個Api級別或以上?

@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)標註的平均「只是API級別23」或「爲API級別23及以上」?例如,如果設備24的Api級別是onAttach(上下文環境)方法,則稱爲?

+5

'@TargetApi(23)'意味着「作爲此方法的作者,我將確保它永遠不會在API級別24或更高級別上調用。但是,我測試了它並覺得它對於API級別正常工作即使我的'minSdkVersion'低於23。您使用'@ TargetApi'對Android本身以及是否調用該方法都沒有影響。它只是告訴構建工具停止抱怨你覺得你正在處理的問題。 – CommonsWare

回答

5

TargetApi註解僅用於lint工具目的,並且在運行時沒有結果。如果您在方法中使用了23種可用的API方法,並且不聲明TargetApi,那麼您只會收到一些警告,指出您使用的API在最低SDK版本中不可用。這是你的責任,調用這個方法的連貫性意識到它將被調用的API級別。