當activity界面比較復雜的時候難免會導致activity啟動緩慢,影響用戶體驗蔚晨。這時候優(yōu)化迫在眉睫乍钻,但是開發(fā)時間又不太夠不是很想仔細的去細分UI界面,提取耗時操作的時候铭腕,IdleHandler 就派上了用場团赁。
我們可以利用IdleHandler 把某一部分比較負復雜的但是用戶并不會第一時間看到的UI業(yè)務邏輯延遲加載。代碼雖然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
}