java idle耗时_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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值