美文网首页
android IdleHandler 空闲时执行耗时操作,ac

android IdleHandler 空闲时执行耗时操作,ac

作者: sjj_dot | 来源:发表于2020-12-01 11:47 被阅读0次

当activity界面比较复杂的时候难免会导致activity启动缓慢,影响用户体验。这时候优化迫在眉睫,但是开发时间又不太够不是很想仔细的去细分UI界面,提取耗时操作的时候,IdleHandler 就派上了用场。

我们可以利用IdleHandler 把某一部分比较负复杂的但是用户并不会第一时间看到的UI业务逻辑延迟加载。代码虽然low,效果其实还不错,可以跟老板吹一波

封装代码

import android.os.Looper
import android.os.MessageQueue
import io.reactivex.disposables.Disposable
import java.util.concurrent.atomic.AtomicBoolean

class MainThreadIdleRunner {
    companion object {
        @JvmStatic
        fun postRunOnIdle(runnable: Runnable): Disposable {
            return postRunOnIdle { runnable.run() }
        }
    }
}

fun postRunOnIdle(runner: () -> Unit): Disposable {
    return IdleRunner(runner)
}

class IdleRunner(private val runner: () -> Unit) : MessageQueue.IdleHandler, Disposable, AtomicBoolean() {
    init {
        Looper.getMainLooper().queue.addIdleHandler(this)
    }
    override fun isDisposed(): Boolean {
        return get()
    }

    override fun dispose() {
        if (compareAndSet(false, true)) {
            Looper.getMainLooper().queue.removeIdleHandler(this)
        }
    }



    override fun queueIdle(): Boolean {
        if (compareAndSet(false, true)) {
            runner()
        }
        return false
    }
}


用法

postRunOnIdle{
    //code doSomething
}

相关文章

  • android IdleHandler 空闲时执行耗时操作,ac

    当activity界面比较复杂的时候难免会导致activity启动缓慢,影响用户体验。这时候优化迫在眉睫,但是开发...

  • Service

    Android的Service Service是在main Thread中执行,Service中不能执行耗时操作(...

  • Android中的线程池

    在Android中,主线程不能执行耗时的操作,否则可能会导致ANR。那么,耗时操作应该在其它线程中执行。线程的创建...

  • IdleHandler分析

    它有什么能力和作用? 查看MessageQueue中的IdleHandler源码发现,当消息队列空闲时会执行Idl...

  • 简单介绍下LiveData

    引子—— 在Android开发中,为了避免ANR,通常耗时的操作(网络请求、数据库操作)都会在子线程中执行,执行完...

  • 无标题文章

    --如何处理android多线程安全不要堵塞UI线程,不在主线程中做耗时操作的处理,可以开启子线程去执行耗时操作 ...

  • Android异步精髓Handler分析

    前言 我们都知道在Android中有个不成文的规定 主线程可以刷新ui,不能执行耗时操作 子线程中可以进行耗时操作...

  • Android异步任务实现详解

    在Android开发中,主线程(UI线程)不能执行耗时的操作,通常将一些耗时的操作使用异步任务的方式进行处理,简单...

  • Android接口回调

    需求 用户点击按钮,触发执行耗时操作。程序开启子线程,然后在子线程中执行耗时操作。当耗时操作执行完毕后,执行回调函...

  • Android-异步操作更新UI界面的几种方法

    在Android开发中,耗时操作是比较多的,更新ui需要在主线程中,然而耗时操作是不能放在主UI线程中在执行的,因...

网友评论

      本文标题:android IdleHandler 空闲时执行耗时操作,ac

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