Lifecycle¶
Nodes have their own lifecycles, directly using the related classes of androidx.lifecycle
.
Capping¶
No node can be in a higher lifecycle state than any of its parents or the Android Activity it lives in.
On-screen & off-screen¶
NavModel
controls which children should be rendered on the screen and which should not with NavModel.screenState
.
The behaviour is customisable in BaseNavModel
via OnScreenStateResolver
.
When a NavElement
of the node is marked as on-screen, its lifecycle follows the parent node's lifecycle.
The rendering status does not affect it – the node might not be added to Compose view and still be in a RESUMED
state.
When a NavElement
of the node is marked as off-screen, the following might happen:
- Its lifecycle is capped with
CREATED
(orSTOPPED
) in case ofChildEntry.KeepMode.KEEP
. - The node is destroyed and its state is saved in case of
ChildEntry.KeepMode.SUSPEND
.
ChildEntry.KeepMode
settings can be configured for each ParentNode
individually or globally via Appyx.defaultChildKeepMode
.
When a node is removed completely from NavModel
, it will be in DESTROYED
state.
Lifecycle changes¶
The lifecycle state can be affected by:
- The NavModel of the parent (adding or removing child
Nodes
and changing their on-screen status) - The parent's lifecycle state capping its children (transitive in the tree)
- Android lifecycle (Activity) capping the whole tree
Back stack node lifecycle¶
An example demonstrating the above:
Note that NavModels might have their slight differences (e.g. whether their operations remove a Node
only from the view, or completely destroy it).
In the case of the back stack:
- The
Push
operation adds a new element and stashes the currently active one – the stashed one will be removed from the view &STOPPED
- The
Pop
operation removes an element, the childNode
will beDESTROYED