Компилятор имеет полное право выбросить и сам ассерт и следующую за ним проверку, а в рантайме засегфолтиться. Кстати, clang в некоторых случаях об этом честно предупреждает.
Активити прибивается на уровне фреймворка, то есть объект переходит в состояние destroyed. Сам java-объект, если на него есть ссылки никуда не денется.
Почему тогда во фрагментах очень легко получить NPE при getActivity()?
Потому что fragment вполне может быть отсоединен от activity. Нужно следить за его жизненным циклом.
Да и вообще, контекст-то дохлый. Что в таком случае будет с this?
Дохлый то он дохлый, но если программист сохранил на него ссылку, java-объект никуда уже не денется, хотя с точки зрения стандартной библиотеки андроида компонент уничтожен. Это разные уровни абстракции.
Допустим у нас есть две Activity. В первой запускаем вторую (в отдельной таске) и сохраняем во второй Acitivity ссылку на первую, например, через статическое поле. Потом первая Activity уходит к праотцам по каким-то причинам.
Ты хочешь сказать, что несмотря на то, что на уровне фреймворка Activity будет дохлой, ссылка на неё не будет null?