返回

消息同步屏障和IdleHandler之谜

Android

我们都知道Android Handler强大的功能可以帮助我们轻松实现线程间的通信。然而,Handler的源码却像一个谜一样,很少有人能完全理解。今天,我们就来揭开这个谜团,深入分析Handler源码中的两个鲜为人知的概念:消息同步屏障和IdleHandler。

消息同步屏障

我们平时在使用Handler时一般发送的有两种消息:同步消息、异步消息。从“消息同步屏障”字面意思我们可以知道,它是一个消息处理的边界,在这之前的所有消息都必须处理完毕后才能处理接下来的消息。

消息同步屏障的实现很简单,它就是一个while循环,只要消息队列中还有未处理的消息,这个循环就不会退出。当消息队列中没有消息时,循环退出,后面的消息才能被处理。

while (hasMessages(MSG_ASYNCHRONOUS_CALLBACKS)) {
    handleMessage(obtainMessage());
}

IdleHandler

IdleHandler是一个用来处理空闲时间的Handler。当消息队列中没有消息时,IdleHandler就会被调用。IdleHandler可以用来做一些事情,比如释放资源、更新UI等等。

IdleHandler的实现也很简单,它就是一个Runnable接口,当消息队列中没有消息时,这个Runnable接口就会被调用。

final Runnable mIdleHandler = new Runnable() {
    public void run() {
        // TODO
    }
};

消息同步屏障和IdleHandler的作用

消息同步屏障和IdleHandler在Android系统中扮演着重要的角色。消息同步屏障保证了消息的处理顺序,IdleHandler保证了空闲时间的利用。

消息同步屏障的作用

  • 保证了消息的处理顺序。
  • 防止消息队列被阻塞。
  • 提高了系统性能。

IdleHandler的作用

  • 利用空闲时间做一些事情,比如释放资源、更新UI等等。
  • 提高了系统性能。

如何使用消息同步屏障和IdleHandler

在实际开发中,我们很少会直接使用消息同步屏障和IdleHandler。但是,我们可以通过Handler来间接使用它们。

  • 当我们发送同步消息时,消息同步屏障就会被自动使用。
  • 当我们发送异步消息时,IdleHandler就会被自动使用。

因此,在使用Handler时,我们只需要关心消息的类型,而不需要关心消息同步屏障和IdleHandler。

总结

消息同步屏障和IdleHandler是Android系统中两个重要的概念。它们保证了消息的处理顺序和空闲时间的利用,从而提高了系统性能。在实际开发中,我们很少会直接使用它们,但是我们可以通过Handler来间接使用它们。

希望这篇文章能帮助你更好地理解Handler的源码,并能帮助你更好地使用Handler。