bind
Binds this MessageView to viewModel: wires the analytics/storage factories required to render native messages and collects render states within scope. Collection always runs on the main thread, regardless of scope's own dispatcher, since MessageView.render must run there. Close the returned AutoCloseable (or cancel scope) to unbind and report dismissal for any active native message -- both are equivalent, since unbinding is driven by the underlying collector job ending, not by which of the two triggered it. Teardown runs on the main thread; if triggered from another thread, it may complete asynchronously shortly after close()/cancellation returns rather than synchronously within the call.
Use this overload when there is no LifecycleOwner to gate collection against (e.g., a MessageView embedded by a cross-platform bridge that manages its own view lifecycle). For a host with a LifecycleOwner (such as a Fragment), prefer the bind(viewModel, lifecycleOwner, minActiveState) overload instead.