2015-12-22 13 views
6

avrei dovuto vedermela con MeasureSpec quando mi sono imbattuto in questo po 'di testo:Android usa sempre la più recente API per eseguire un'app?

Nota: Il livello di API 17 e più bassa, l'implementazione di makeMeasureSpec era tale che l'ordine degli argomenti non aveva importanza e troppo pieno in entrambe valore potrebbe impatto sul MeasureSpec risultante. RelativeLayout è stato interessato da questo bug. Le app che indirizzano livelli API superiori a 17 otterranno il comportamento fisso e più rigoroso.

In modo che mi ha fatto chiedo: se io costruisco un app per API 14, ma ho eseguito su un API 22 dispositivo è risolvere il bug o sarà bug < API 17 di esistere ancora sul dispositivo 22?

+1

provalo. Metti un po 'di sforzo. –

+0

Ho e sembra, anche se ancora mi piacerebbe la conformazione da uno sviluppatore più esperto. Inoltre, l'ho fatto, ho cercato documenti che lo confermassero, ma non sono riuscito a trovarne uno (almeno uno in sintassi e dizione che riconosco). Più oltre, non vedo come questo meritato un downvote segue la meta. – Austi01101110

risposta

4

makeMeasureSpec (API 17 <) implementazione del metodo è il seguente:

public static int makeMeasureSpec(int size, int mode) { 
     if (sUseBrokenMakeMeasureSpec) { 
      return size + mode; 
     } else { 
      return (size & ~MODE_MASK) | (mode & MODE_MASK); 
     } 
    } 

Come si può vedere il suo valore di ritorno dipende dal valore della sUseBrokenMakeMeasureSpec che value is assigned nella costruzione della classe View:

sUseBrokenMakeMeasureSpec = targetSdkVersion <= JELLY_BEAN_MR1; 

Quindi, solo la destinazione dell'app determinerà il comportamento. In questo modo un nuovo sistema può mantenere la compatibilità con un'app vecchia che espelle il vecchio comportamento.

+0

Addendum: sai se questo è lo stesso per l'API nativa (quelli che vengono chiamati da java api)? Inoltre, grazie per aver risposto. – Austi01101110

+0

In teoria il sdk di destinazione può essere controllato anche nell'API nativa, ma ulteriori ricerche dovrebbero essere fatte. – csenga

+1

controlla questo: http://stackoverflow.com/questions/11660575/how-to-know-which-api-level-im-building-for-using-ndk-build – csenga

Problemi correlati