Files
coco 723ce1af5c a
2026-07-03 15:12:48 +08:00

46 lines
1.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` (or `STOPPED`) in case of `ChildEntry.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:
<img src="https://i.imgur.com/WlcQHqV.gif" width="200">
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 child `Node` will be `DESTROYED`