Если я использую ViewBinding во фрагментах, будет ли у меня NPE после onDestoryView ()? - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь использовать ViewBinding во фрагментах.

Во-первых, Google сказал следующее:

Примечание. Фрагменты переживают свои представления. Убедитесь, что вы очистили все ссылки на экземпляр класса привязки в методе фрагмента onDestroyView (). [ Использовать привязку представления во фрагментах ]

Итак, я написал код, как показано ниже:

private var _binding: ResultProfileBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!

override fun onDestroyView() {
    super.onDestroyView()
    _binding = null
}

Затем у меня возник вопрос о NPE после onDestoryView ().

Это безопасно? Предположим, вы получили сетевой ответ в какой-то момент между onDestoryView () и onDetact ()

1 Ответ

4 голосов
/ 27 мая 2020

Фрагменты переживают свои представления

Давайте объясним это, предположим, что у вас есть фрагменты A и B (как A, так и B в BackStack), одно и то же представление контейнера и тот же FragmentManager. Когда вы заменяете фрагмент A на B. Все элементы представления A будут уничтожены, но экземпляр фрагмента A все еще жив во фрагменте BackStack. Это означает, что если вы сохраните значение _binding, это может быть утечка, потому что он все еще сохраняет ссылку на просмотр, но Android Система хочет очистить его. Поэтому Google рекомендует присвоить значение _binding null, чтобы освободить ссылку на представление.

Предположим, вы получили сетевой ответ в какой-то момент между onDestoryView () и onDetact ()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...