第10章 Android 的消息机制

2020-12-06  本文已影响0人  SunnyGL

我们知道,如果在子线程中更新 UI,那么程序就会抛出异常。 ViewRootImpl 的 checkThread 方法会对操作 UI 的线程做验证,异常也是由此抛出,代码如下所示:

void checkThread() {
    if (mThread != Thread.currentThread()) {
        throw new CalledFromWrongThreadException(
                "Only the original thread that created a view hierarchy can touch its views.");
    }
}

Android 的 UI 控件不是线程安全的,如果在多线程中并发访问可能会导致 UI 控件处于不可预期的状态。如果对 UI 控件加上锁机制,会使 UI 访问的逻辑变得复杂,而且锁机制会降低 UI 的访问效率。所以最简单高效的方法就是采用单线程来管理 UI ,于是 Google 给开发者提供了 Handler 来从任意子线程切换到 UI 线程。

Handler 具体实现细节详见《Android Handler 流程分析与思考》

上一篇 下一篇

猜你喜欢

热点阅读