2016-04-24 6 views
7

Ich verwende @TargetApi (23) in meiner App. @TargetApi (23) Anmerkung des mean "nur für Api Level 23" oder "für Api Level 23 und höher":Ist @TargetApi Annotation nur für eine API-Ebene oder höher?

@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) { 

    } 

Aber ich kann nicht etwas verstehen? Zum Beispiel, wenn API-Ebene von Gerät 24, ist OnAttach (Kontext Kontext) -Methode aufgerufen?

+5

'@TargetApi (23)' bedeutet "Ich, als der Autor dieser Methode, wird sicherstellen, dass es nie auf API Level 24 oder höher aufgerufen wird. Ich habe es jedoch getestet und fühle, dass es richtig für API Level funktioniert 23 und darunter, obwohl meine "minSdkVersion" unter 23 ist. " Ihre Verwendung von '@ TargetApi' hat keine Auswirkungen auf Android selbst und darauf, ob die Methode aufgerufen wird oder nicht. Es teilt den Build-Tools lediglich mit, dass sie sich nicht mehr über Probleme beschweren sollten, die Sie korrekt behandeln. – CommonsWare

Antwort

5

TargetApi Anmerkung ist nur für Lint Tool Zwecke und hat kein Ergebnis in der Laufzeit. Wenn Sie API-Methoden verwenden, die in Ihrer Methode nur verfügbar sind und TargetApi nicht deklarieren, erhalten Sie nur einige Warnungen, die anzeigen, dass Sie APIs verwenden, die in Ihrer SDK-Mindestversion nicht verfügbar sind. Es liegt in Ihrer Verantwortung, diese Methode als kohärent zu bezeichnen, da sie sich der API-Ebene bewusst ist, von der sie aufgerufen wird.

Verwandte Themen