在Android中,非主线程不能更新UI(ViewRootImpl在主线程中创建,所以我们要在主线程中更新UI。同理,如果ViewRootImpl在子线程中创建的话,那么也可以在子线程中更新UI,也就是说在哪里更新UI和ViewRootImpl在哪里创建是关联的。默认ViewRootImpl在主线程中创建),这时候我们可以借助Handler来实现(Activiy.runOnUiThread()也可以实现,但原理也是Handler,调用的post(Runnable));但Handler实现机制是什么?见下图所示
从上图,我们可以发现几个重要信息:
1、Handler可以关联多个Looper
2、一个线程只能有一个Looper
3、ThreadLocal是线程内共享的局部变量,这里为了共享Looper实例,以实现唯一性