Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When would Fragment's onDestroyView be called, but it wouldn't be destroyed?

Looking at a Fragment's lifecycle, I am not sure about the scenarios that can happen here. There are 2 possible ways to go when a Fragment stops being active.

  1. call the appropriate callbacks, destroy view and then destroy the fragment
  2. call the callbacks, destroy view, but keep the fragment itself alive

Which of the two alternatives is done in which situations? What decides which of them? If a fragment is added to the backstack, then removed/replaced, why not throw it away? Why keep it?

Edit: it dawned on me, could it be dependant on whether the fragment is retained or not?

enter image description here

like image 670
Martin Melka Avatar asked May 11 '14 14:05

Martin Melka


People also ask

When Fragment onDestroyView is called?

This answer is not useful. Show activity on this post. It seems to all depend on whether the fragment is retained or not. When the fragment is retained, then after onDestroyView comes onCreateView.

What is correct about activities and fragments onDestroy ()?

After onDestroyView() , you can (and likely should) release all of your View references to allow them to be garbage collected. In many cases, it's not necessary, as if it's just happening during a configuration change, onDestroy() will immediately follow and the whole instance will be garbage collected.

What is retained fragment Android?

A Fragment represents a reusable portion of your app's User Interface. Retained Fragment consists of the configuration change that causes the underlying Activity to be destroyed. The term "retained" refers to the fragment that will not be destroyed on configuration changes.


2 Answers

It seems to all depend on whether the fragment is retained or not. When the fragment is retained, then after onDestroyView comes onCreateView.

When the fragment is retained (i.e. setRetainInstance(true)), then the log while rotating the devicelooks like this:

com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume com.example.FragmentLifecycleTestApp W/MainFragment﹕ onPause com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStop com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroyView com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDetach com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume 

But when it is not retained, it goes like this:

com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume com.example.FragmentLifecycleTestApp W/MainFragment﹕ onPause com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStop com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroyView com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroy com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDetach com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume 
like image 170
Martin Melka Avatar answered Sep 20 '22 15:09

Martin Melka


Take a look on the diagram:

States of Activity, Fragment and Fragment Manager

This is the explicit visualization of all lifecycle states. Enjoy.

like image 20
Oleksandr Kucherenko Avatar answered Sep 22 '22 15:09

Oleksandr Kucherenko