A thread gets a
MessageQueue by calling
Looper.prepare() after its running.
Looper.prepare() identifies the calling thread, creates a
MessageQueue object and associate the
thread with them in
ThreadLocal storage class.
Looper.loop() must be called to start the associated looper. Similarly, the
looper must be terminated explicitly through
White labeling — This one matters when you deploy your app with different branding for different clients. ‘Build flavors’ on Android or ‘Targets’ on iOS — these platforms have easy systems in place for supporting this. None of the cross-platform approaches that I know of support this, so you’ll end up scripting your own solution in the build process — investing development time, and making every deployment more complex.