android IdleHandler 空闲时执行耗时操作,activity 启动速度优化

当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 空闲时执行耗时操作,activity 启动速度优化)