Is OnActivityCreated always called?

Looking at the great diagram at https://github.com/xxv/android-lifecycle , it says that onActivityCreated () is not called when the fragment is restarted.

I have doubts about this:

  • It's true? Can someone provide some link to the documentation explaining what the life cycle behavior is?
  • Exactly what is Fragment restart ()?
  • Can Android decide to remove invisible fragments, but maintain activity that supports them?

Note 1 I tested that onActivityCreated is called when a Fragment is added due to activity, and also when a fragment is added manually after the activity is fully started and active.

Note 2 I am testing the support version 23.3.0. Is it possible that some behavior has changed from previous versions?

+7
android android-lifecycle android-fragments
source share
1 answer

Most host activity methods are fragmented.

onRestart () is called when your activity is on the back stack and you press the back button, so there is no need to recreate it (it just restarts).

Some methods do not exist in the Fragment (for example, onRestart (), onRestoreInstanceState (), they do not know why). Therefore, the restart occurs on the host and it calls Fragment onStart (), onResume (), just think that it is rebooting with Activity.

Another story with attachment and detachment. In some callback, you want to work safely with the view tree, and onActivityCreated () is a good candidate, so it does not restart.

I assume that Fragment does not have onRestart (), because the developer can control the back stack, and you can save the fragments (which you should not put on the back stack).

The best proof is code. Try playing with logging. Some time ago I did it myself , because Steve's project only checks one fragment.

Put forward a small mode (run ActivityWithDynamicFragments, then press the back button), and here is the log:

176448881: DynamicFragment.<init> / ctor 176448881: DynamicFragment.onAttach / in base with context 176448881: DynamicFragment.onAttach / in base with activity 176448881: DynamicFragment.onAttach / out base with activity 176448881: DynamicFragment.onAttach / out base with context 176448881: DynamicFragment.onCreate / in base 176448881: DynamicFragment.onCreate / out base 176448881: DynamicFragment.onCreateView / in brand new 176448881: DynamicFragment.onCreateView / out 176448881: DynamicFragment.onViewCreated / in base 176448881: DynamicFragment.onViewCreated / out base 176448881: DynamicFragment.onActivityCreated / in base 176448881: DynamicFragment.onActivityCreated / out base 176448881: DynamicFragment.onViewStateRestored / in base 176448881: DynamicFragment.onViewStateRestored / out base 176448881: DynamicFragment.onStart / in base 176448881: DynamicFragment.onStart / out base 176448881: DynamicFragment.onResume / in base 176448881: DynamicFragment.onResume / out base 176448881: DynamicFragment.onPause / in base 176448881: DynamicFragment.onPause / out base 227303269: ActivityWithDynamicFragments.onCreate / in brand new 227303269: ActivityWithDynamicFragments.onCreate / in base 227303269: ActivityWithDynamicFragments.onCreate / out base 227303269: ActivityWithDynamicFragments.onCreate / after super 227303269: ActivityWithDynamicFragments.onContentChanged / in base 227303269: ActivityWithDynamicFragments.onContentChanged / out base 227303269: ActivityWithDynamicFragments.onStart / in base 227303269: ActivityWithDynamicFragments.onStart / out base 227303269: ActivityWithDynamicFragments.onResume / in base 227303269: ActivityWithDynamicFragments.onResume / out base 227303269: ActivityWithDynamicFragments.onPostResume / in base 227303269: ActivityWithDynamicFragments.onResumeFragments / in base 227303269: ActivityWithDynamicFragments.onResumeFragments / out base 227303269: ActivityWithDynamicFragments.onPostResume / out base 227303269: ActivityWithDynamicFragments.onAttachedToWindow / in base 227303269: ActivityWithDynamicFragments.onAttachedToWindow / out base 176448881: DynamicFragment.onSaveInstanceState / in base 176448881: DynamicFragment.onSaveInstanceState / out base 176448881: DynamicFragment.onStop / in base 176448881: DynamicFragment.onStop / out base 227303269: ActivityWithDynamicFragments.onPause / in base 227303269: ActivityWithDynamicFragments.onPause / out base D/NSA: onRestart 176448881: DynamicFragment.onStart / in base 176448881: DynamicFragment.onStart / out base 176448881: DynamicFragment.onResume / in base 176448881: DynamicFragment.onResume / out base 227303269: ActivityWithDynamicFragments.onStop / in base 227303269: ActivityWithDynamicFragments.onStop / out base 227303269: ActivityWithDynamicFragments.onDestroy / in base 227303269: ActivityWithDynamicFragments.onDestroy / out base 

We have two types of rest and reboot.

Rest occurs only with the modification (even with the potential when Fragment without UI) of the viewing tree.

A restart occurs when your view tree is stable (for example, your activity with a fragment in the background stack and you want to return it).

Can Android decide to remove invisible fragments, but keep the activity that holds them back?

I believe that the only controlled quantum for killing Android OS is the process (but it is debatable ).

As for Fragment, you can check the source code of FragmentActivity and FragmentManager (I don't see such a stream).

+2
source share

All Articles