Правильный способ получения DisplayMetrics: getResources () или getWindowManager ()

Каким образом можно получить DisplayMetrics, т. xdpi Получить информацию о экране / дисплее, такую ​​как density или xdpi ?

Я спрашиваю, потому что я видел два способа обойти это:

ПЕРВЫЙ:

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

Затем получение информации по metrics.density или metrics.xdpi и т. Д.

ВТОРОЙ:

  getResources().getDisplayMetrics().density 

В этом методе я считаю, что вы можете просто инициализировать переменную, чтобы удерживать DisplayMetric, а затем захватывать информацию, как в методе FIRST:

  DisplayMetrics metricsMethodTwo = getResources().getDisplayMetrics() 

А затем вы можете получить информацию, как обычно: metricsMethodTwo.density или metricsMethodTwo.xdpi

Я видел их в разных местах в Документах. Итак, каковы различия, если таковые имеются, и когда один метод предпочтительнее (или более уместен) над другим и почему? благодаря

Solutions Collecting From Web of "Правильный способ получения DisplayMetrics: getResources () или getWindowManager ()"

 public DisplayMetrics getDisplayMetrics () 

Верните текущие показатели отображения , которые действуют для этого ресурса . Возвращаемый объект следует рассматривать как только для чтения.

 public void getMetrics (DisplayMetrics outMetrics) 

Инициализируйте объект DisplayMetrics из данных этого дисплея .

Разница в том, что метрики, возвращаемые методом « Resources являются метриками для этого конкретного объекта « Resources . Вы всегда можете создать новый экземпляр Resources с помощью конструктора

 Resources(AssetManager assets, DisplayMetrics metrics, Configuration config) 

В котором вы можете установить любые показатели, которые вы хотите, не обязательно метрики, которые вы можете получить из экземпляра Display возвращаемого методом getDefaultDisplay() .

В этом разница. Это может не повлиять на значения, если вы используете только ресурсы по умолчанию и дисплей по умолчанию.