В своей деятельности я часто использую эту идиому:
@Override
public void onDestroy() {
super.onDestroy();
if (isFinishing() != true) return;
// do some final cleanup since we're going away for good
}
Фрагмент имеет метод onDestroy()
, но что эквивалентно isFinishing()
? Должен ли я просто проверить getActivity().isFinishing()
внутри фрагмента onDestroy()
?
ИЗМЕНИТЬ ДОБАВИТЬ:
Вот обратные вызовы (по порядку), которые я получаю при различных обстоятельствах, вместе с тем, возвращает ли getActivity()
значение null или non-null и, если не null, значение getActivity().isFinishing()
:
Сценарий # 1: DialogFragment
показывает и пользователь отбрасывает кнопку (то есть нужно освобождать ссылки):
onDismiss(): activity = non-null, finishing = false
onDestroy(): activity = non-null, finishing = false
Сценарий №2: DialogFragment
отображается, а родительская активность заканчивается (т.е. нужно освобождать ссылки):
onDestroy(): activity = non-null, finishing = true
onDismiss(): activity = null, finishing = n/a
Сценарий №3: DialogFragment
отображается, и ОС временно уничтожает родительскую активность (т.е. не следует отпускать ссылки):
onDestroy(): activity = non-null, finishing = false
onDismiss(): activity = null, finishing = n/a