2016-04-24 12 views
7

Sto usando @TargetApi (23) nella mia app.L'annotazione @TargetApi è solo per un livello Api o superiore?

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

    } 

ma non riesco a capire una cosa: @TargetApi (23) di media "solo per il livello Api 23" o "per il livello Api 23 e sopra" l'annotazione? Ad esempio se il livello Api del dispositivo 24 è chiamato metodo onAttach (contesto contestuale)?

+5

'@TargetApi (23)' significa "Io, come autore di questo metodo, assicurerò che non venga mai chiamato a livello API 24 o superiore. Tuttavia, l'ho provato e penso che funzioni correttamente per il livello API 23 e sotto, anche se il mio 'minSdkVersion' è sotto 23." L'uso di '@ TargetApi' non ha alcun effetto su Android stesso e sul fatto che venga chiamato o meno il metodo. Si limita a dire agli strumenti di costruzione di smettere di lamentarsi dei problemi che ritieni di gestire correttamente. – CommonsWare

risposta

5

TargetApi l'annotazione è solo per gli scopi dello strumento lint e non ha esito in runtime. Se utilizzi metodi API appena disponibili su 23 nel tuo metodo e non dichiari TargetApi, riceverai solo alcuni avvisi che indicano che stai utilizzando API non disponibili nella versione minima dell'SDK. È tua responsabilità chiamare questo metodo con coerenza consapevole del livello API da cui verrà chiamato.

Problemi correlati