RenderNode
RenderNode is used to build hardware accelerated rendering hierarchies. Each RenderNode contains both a display list as well as a set of properties that affect the rendering of the display list. RenderNodes are used internally for all Views by default and are not typically used directly.
RenderNodes are used to divide up the rendering content of a complex scene into smaller pieces that can then be updated individually more cheaply. Updating part of the scene only needs to update the display list or properties of a small number of RenderNode instead of redrawing everything from scratch. A RenderNode only needs its display list re-recorded when its content alone should be changed. RenderNodes can also be transformed without re-recording the display list through the transform properties.
A tree of RenderNodes is owned by a single thread. Recording, changing a property and drawing all mutate the node they are called on, and changing a property of one node may also mutate the nodes drawing it, so none of them may run concurrently with each other. A picture recorded from a node is immutable and can be replayed on any thread.