Пожалуйста, кто-нибудь сказал мне следующее, но я немного озадачен.
Пожалуйста, не могли бы вы подтвердить или оспорить это?
(Фрагмент не сохраняется через setRetainInstance()
В настоящее время обычной практикой является инициализация представлений во фрагментах следующим образом:
private lateinit var myTextView: TextView
fun onViewCreated(view: View, bundle: Bundle) {
...
myTextView = view.findViewById(R.id.myTextViewId)
...
}
И тогда мыНикогда не аннулируйте это свойство. Хотя это обычная практика, это вызывает утечку памяти.
Предпосылки к этому:
Переход от фрагмента A к B выполняется FragmentManager с использованием определенной FragmentTransaction.В зависимости от типа транзакции, менеджер может захотеть уничтожить представление фрагмента, но при этом сохранить экземпляр самого фрагмента (см. Ниже часть жизненного цикла, где говорится «фрагмент возвращается к макету из заднего стека»).Когда пользователь переходит назад, тот же экземпляр фрагмента переносится на передний план, но создается новое представление.
Проблема в том, что если мы сохраним экземпляр в нашем представлении вСвойство lateinit и никогда не очищать ссылку на него, представление не может быть полностью уничтожено, что приводит к утечке памяти.