NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Цитирование документации :
Поскольку система обычно масштабирует приложения, чтобы они соответствовали более крупным экранам, вам не нужно фильтровать приложение с больших экранов. Пока вы выполняете Best Practices for Screen Independence , ваше приложение должно хорошо работать на больших экранах, таких как планшеты. Однако вы можете обнаружить, что ваше приложение не может хорошо масштабироваться или, возможно, вы решили опубликовать две версии вашего приложения для разных конфигураций экрана. В этом случае вы можете использовать элемент
blockquote><compatible-screens>
для управления распределением вашего приложения на основе сочетаний размера экрана и плотности. Внешние службы, такие как Google Play, используют эту информацию, чтобы применить фильтрацию к вашему приложению, так что только устройства, которые имеют конфигурацию экрана, с которой вы заявляете совместимость, могут загружать ваше приложение.Помните, что
<compatible-screens>
требует от вас белого списка всех размеров экрана и плотности , которые вы поддерживаете (и мы получаем новую плотность каждый год или около того), и вы ограничены классическими размерами размеров экрана (small
,normal
,large
,xlarge
). В образце документации отсутствуют некоторые плотности:<compatible-screens> <!-- all small size screens --> <screen android:screenSize="small" android:screenDensity="ldpi" /> <screen android:screenSize="small" android:screenDensity="mdpi" /> <screen android:screenSize="small" android:screenDensity="hdpi" /> <screen android:screenSize="small" android:screenDensity="xhdpi" /> <!-- all normal size screens --> <screen android:screenSize="normal" android:screenDensity="ldpi" /> <screen android:screenSize="normal" android:screenDensity="mdpi" /> <screen android:screenSize="normal" android:screenDensity="hdpi" /> <screen android:screenSize="normal" android:screenDensity="xhdpi" /> </compatible-screens>
Вам нужно будет добавить дополнительные элементы, если они хотят поддерживать устройства
tvdpi
,xxhdpi
иxxxhdpi
.Выставляя документацию для
<compatible-screens>
:Внимание: Обычно вы не должны использовать этот манифест. Использование этого элемента может значительно уменьшить потенциальную базу пользователей для вашего приложения, не позволяя пользователям устанавливать ваше приложение, если у них есть устройство с конфигурацией экрана, которую вы еще не указали. Вы должны использовать его только в крайнем случае, когда приложение абсолютно не работает с определенными конфигурациями экрана. Вместо использования этого элемента вы должны следовать руководству по поддержке нескольких экранов, чтобы обеспечить масштабируемую поддержку нескольких экранов, используя альтернативные макеты и растровые изображения для разных размеров и плотности экрана.
blockquote>И помните, что маркетинговые термины, такие как «phablet», не определены, и поэтому ваше приложение может завершить доставку на некоторых устройствах, которые, по вашему мнению, являются phablet или что кто-то другой считает, что это phablet.
Альтернативой является проверка функции android.hardware.telephony
<uses-feature android:name="android.hardware.telephony" android:required="true" />
Это ограничило бы приложение телефонами. Конечно, в это будут включены phablets, но это будет (IMHO ) лучшее решение, чем когда-либо изменяющийся подход к разрешению экрана.
Из-за высокой плотности новых устройств, таких как Nexus 5X, Nexus 6P и Samsung Galaxy S6, нам пришлось адаптировать манифест следующим образом:
<compatible-screens>
<screen android:screenSize="small" android:screenDensity="ldpi" />
<screen android:screenSize="small" android:screenDensity="mdpi" />
<screen android:screenSize="small" android:screenDensity="hdpi" />
<screen android:screenSize="small" android:screenDensity="xhdpi" />
<screen android:screenSize="small" android:screenDensity="420" />
<screen android:screenSize="small" android:screenDensity="480" />
<screen android:screenSize="small" android:screenDensity="560" />
<screen android:screenSize="small" android:screenDensity="640" />
<screen android:screenSize="normal" android:screenDensity="ldpi" />
<screen android:screenSize="normal" android:screenDensity="mdpi" />
<screen android:screenSize="normal" android:screenDensity="hdpi" />
<screen android:screenSize="normal" android:screenDensity="xhdpi" />
<screen android:screenSize="normal" android:screenDensity="420" />
<screen android:screenSize="normal" android:screenDensity="480" />
<screen android:screenSize="normal" android:screenDensity="560" />
<screen android:screenSize="normal" android:screenDensity="640" />
<screen android:screenSize="large" android:screenDensity="ldpi" />
<screen android:screenSize="large" android:screenDensity="mdpi" />
<screen android:screenSize="large" android:screenDensity="hdpi" />
<screen android:screenSize="large" android:screenDensity="xhdpi" />
<screen android:screenSize="large" android:screenDensity="420" />
<screen android:screenSize="large" android:screenDensity="480" />
<screen android:screenSize="large" android:screenDensity="560" />
<screen android:screenSize="large" android:screenDensity="640" />
</compatible-screens>
Это действительно зависит от того, что вы думаете о телефоне / phablets.
Существует официальное руководство , которое будет объяснять намного лучше меня, но по существу, вы могли бы сделать следующее, чтобы ограничить ваше приложение только мобильными устройствами.
AndroidManifest.xml
<manifest ... >
<compatible-screens>
<!-- all small size screens -->
<screen android:screenSize="small" android:screenDensity="ldpi" />
<screen android:screenSize="small" android:screenDensity="mdpi" />
<screen android:screenSize="small" android:screenDensity="hdpi" />
<screen android:screenSize="small" android:screenDensity="xhdpi" />
<!-- all normal size screens -->
<screen android:screenSize="normal" android:screenDensity="ldpi" />
<screen android:screenSize="normal" android:screenDensity="mdpi" />
<screen android:screenSize="normal" android:screenDensity="hdpi" />
<screen android:screenSize="normal" android:screenDensity="xhdpi" />
</compatible-screens>
...
<application ... >
...
<application>
</manifest>
dp
для этих ковшей. Грубо говоря,large
ударяет вокруг 5 " диагональ, тогда какxlarge
начинается с 10 " диагональ. – CommonsWare 10 August 2014 в 17:28normal
. – CommonsWare 10 August 2014 в 17:32