Forma correcta de obtener DisplayMetrics: getResources () o getWindowManager ()

¿Cuál es la forma correcta de obtener DisplayMetrics, es decir, obtener información de pantalla / pantalla como density o xdpi ?

Le pregunto porque he visto dos maneras de hacer esto:

PRIMERO:

  DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); 

a continuación, obtener la información por metrics.density o metrics.xdpi , etc

SEGUNDO:

  getResources().getDisplayMetrics().density 

en este método creo que también puede simplemente inicializar una variable para mantener el DisplayMetric y luego agarrar información como en el método FIRST:

  DisplayMetrics metricsMethodTwo = getResources().getDisplayMetrics() 

y luego puede obtener información como normal: metricsMethodTwo.density o metricsMethodTwo.xdpi

He visto ambos en varios lugares en los Docs. Entonces, ¿cuáles son las diferencias si las hay, y cuándo es un método favorecido (o más apropiado) sobre el otro y por qué? Gracias

 public DisplayMetrics getDisplayMetrics () 

Devuelve las métricas de visualización actuales que están en vigor para este objeto de recurso . El objeto devuelto debe ser tratado como de sólo lectura.

 public void getMetrics (DisplayMetrics outMetrics) 

Inicialice un objeto DisplayMetrics a partir de los datos de esta pantalla .

La diferencia es que las métricas devueltas por el método Resources son las métricas para ese objeto Resources particular. Siempre puede crear una nueva instancia Resources con el constructor

 Resources(AssetManager assets, DisplayMetrics metrics, Configuration config) 

en la que puede establecer las métricas que desee, no necesariamente las métricas que puede obtener de la instancia de Display devuelta por el método getDefaultDisplay() .

Esa es la diferencia. No puede hacer una diferencia aunque en los valores si está utilizando sólo los recursos predeterminados y la visualización predeterminada.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.