Что эквивалентно фрагменту Activity.isFinishing ()?

В своей деятельности я часто использую эту идиому:

@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() изнутри getActivity().isFinishing() этого фрагмента?

ДОПОЛНИТЕЛЬНО ДОБАВИТЬ:

Вот обратные вызовы (по порядку), которые я получаю при различных обстоятельствах, а getActivity() возвращает ли getActivity() null или non-null и, если не null, значение getActivity().isFinishing() :

Сценарий №1: DialogFragment и кнопка DialogFragment пользователя (т. DialogFragment Необходимо освободить ссылки):

 onDismiss(): activity = non-null, finishing = false onDestroy(): activity = non-null, finishing = false 

Сценарий №2: DialogFragment и завершается родительская активность (т. 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 

Solutions Collecting From Web of "Что эквивалентно фрагменту Activity.isFinishing ()?"

Фрагменты имеют метод, называемый isRemoving() который истинен, когда фрагмент удаляется из Activity:

Верните true, если этот фрагмент в настоящее время удаляется из его активности. Дело не в том, заканчивается ли его деятельность, а в том, находится ли она в процессе удаления из своей деятельности.

Спасибо за помощь, ребята! Я закончил тем, что добавил их в свой DialogFragment:

 private void doReleaseReferences() { // release the stuff } @Override public void onDestroy() { super.onDestroy(); if (getActivity().isFinishing()) doReleaseReferences(); } @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); if (getActivity() != null) doReleaseReferences(); } 

Основываясь на обратном обращении, я добавил к первому вопросу, который, как мне кажется, служит моим целям. При нажатии кнопки «Назад» или завершении родительской активности ссылки высвобождаются; Когда родительская активность уничтожается ОС с целью ее восстановления позже, они не освобождаются.

Если вы хотите очистить ссылки на фрагменты на основе, вы можете использовать этот вспомогательный метод для замены фрагмента

 public abstract class BaseActivity extends AppCompatActivity { @Override protected void onDestroy() { if (isFinishing()) { notifyStackedFragmentsFinishing(); } super.onDestroy(); } protected void changeFragment(Fragment fragment) { notifyStackedFragmentsFinishing(); getSupportFragmentManager().beginTransaction() .replace(R.id.fragment, fragment) .commit(); } private void notifyStackedFragmentsFinishing() { List<Fragment> fragments = getSupportFragmentManager().getFragments(); if (fragments != null && !fragments.isEmpty()) { for (Fragment fragment : fragments) { ((BaseFragment) fragment).releaseOnFinishing(); } } } } 

Теперь вы можете расширить все свои действия от BaseActivity и всех своих фрагментов от BaseFragment . Также, если вы складываете фрагменты, вы, вероятно, должны расширять больше, т.е. onBackPressed ()