美文网首页理论
Android IdleHandler

Android IdleHandler

作者: 折剑游侠 | 来源:发表于2020-01-19 17:05 被阅读0次

前面讲Handler的时在MessageQueue源码中看到了IdleHandler的身影

MessageQueue.next()

    Message next() {
        ...
        keep = idler.queueIdle();
        ...
    }

IdleHandler是MessageQueue内部定义的静态接口,官方注释清晰的说明了IdleHandler.queueIdle()是在MessageQueue中没有message,等待更多消息时调用。也就是说IdleHandler是在事件循环空闲时执行的。

    public static interface IdleHandler {
        boolean queueIdle();
    }

Activity、Window、View有说到ui绘制是在onResume()回调方法执行后开启的。

ActivityThread.handleResumeActivity()

    public void handleResumeActivity(...){
    ...
    //回调onResume()
    final ActivityClientRecord r = performResumeActivity(token, finalStateRequest, reason);
    ...
    final Activity a = r.activity
    ...
    r.window = r.activity.getWindow();
    View decor = r.window.getDecorView();
    decor.setVisibility(View.INVISIBLE);
    ViewManager wm = a.getWindowManager();
    ...
    //调用到ViewRootImpl.performTraversals()
    r.activity.makeVisible();
    }

onResume()方法回调在ui绘制前就执行了。如此说来在onResume()生命周期之前,ui线程的任何操作都会延迟ui绘制开始执行的时间。可以把一些ui线程执行的耗时逻辑放在IdleHandler中执行,以此来优化页面的启动时间。由于onResume()和performTraversals()本身都是在Looper的事件循环中执行,所以IdleHandler的queueIdle()方法一定会在ui绘制完毕且MessageQueue无消息处理时执行。

使用起来也很简单,实现IdleHandler()接口重写queueIdle()方法就好。

    override fun onResume() {
        super.onResume()

        Looper.myQueue().addIdleHandler {
            //doSomething
            //需注意此处返回值。true会保留,每到空闲都会执行;false执行一次后会remove
            false
        }
    }

相关文章

  • Android IdleHandler

    前面讲Handler的时在MessageQueue源码中看到了IdleHandler的身影 MessageQueu...

  • Android:Handler中的Idle Handler

    Android:Handler中的Idle Handler 抛出 Handler中的IdleHandler 它有什...

  • Android IdleHandler 详解

    介绍 IdleHandler 是 MessageQueue 内定义的一个接口,一般可用于做性能优化。当消息队列内没...

  • Android IdleHandler 原理浅析

    问:什么是 IdleHandler?有什么用?怎么用? 答:IdleHandler 可以用来提升性能,主要用在我们...

  • Android IdleHandler 原理浅析

    问:什么是 IdleHandler?有什么用?怎么用?答:IdleHandler 可以用来提升性能,主要用在我们希...

  • Handler之IdleHandler

    IdleHandler是什么? IdleHandler是定义在MessageQueue里面的一个Interface...

  • [Android] Handler中的IdleHandler

    抛出 Handler中的IdleHandler 它有什么能力? 它有什么用处? 能想到一些合适的场景吗? Answ...

  • Handler中的IdleHandler

    1.1 IdleHandler 基本情况 IdleHandler 可以用来提升性能,主要用在我们希望能够在当前线程...

  • IdleHandler

    使用方法queueIdle返回值,true表明还会继续使用,false表示不再继续使用,执行完移除。 意思Idle...

  • IdleHandler

    什么是 IdleHandler IdleHandler 可以用来提升提升性能,主要用在我们希望能够在当前线程消息队...

网友评论

    本文标题:Android IdleHandler

    本文链接:https://www.haomeiwen.com/subject/szwrzctx.html