美文网首页
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

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