idle
Drains all pending work on both the Litho layout thread and the main looper, repeating until both are simultaneously idle (quiescence).
A single drain pass is not sufficient because work ping-pongs between threads: layout completes on the background thread and posts a result to the main thread, which in turn schedules a follow-up layout (e.g. HScroll resolving its height after the initial pass). Each call to idle processes one full round-trip, so the loop continues until neither looper has pending work.
Throws IllegalStateException if quiescence is not reached within MAX_IDLE_PASSES passes, which indicates a component is continuously enqueuing layout work (an application bug).
Use this after any action that triggers async layout or visibility events.