liangjingkanji / Net

Android 基于协程/OkHttp网络请求工具
http://liangjingkanji.github.io/Net/
MIT License
1.8k stars 209 forks source link

runMain 方法的优化咨询 #210

Closed RebornQ closed 7 months ago

RebornQ commented 7 months ago

问题描述

runMain 目前每次在子线程调用都会创建一个匿名 Handler 对象

https://github.com/liangjingkanji/Net/blob/master/net/src/main/java/com/drake/net/utils/Suspend.kt

fun runMain(block: () -> Unit) {
    if (Looper.myLooper() == Looper.getMainLooper()) {
        block()
    } else {
        Handler(Looper.getMainLooper()).post { block() }
    }
}

期望行为

改成以下方式是否会更好?

val mainThreadHandler by lazy { Handler(Looper.getMainLooper()) }
fun runMain(block: () -> Unit) {
    if (Looper.myLooper() == Looper.getMainLooper()) {
        block()
    } else {
        mainThreadHandler.post { block() }
    }
}

在接入讯飞一个 SDK 时,在其 Demo 中看到 mainThread { } 方法的实现的时候,想起了 Net 的 runMain 方法

如何复现

无需复现

fork仓库并复现问题可以快速解决, 猜测只会让问题晦涩难懂, 耽误所有人时间

截图

异常堆栈信息或者手机截图/视频(拖拽到输入框即可上传)

版本

liangjingkanji commented 7 months ago

的确更好, 该优化建议由你发起你想发起Pr请求吗?

RebornQ commented 7 months ago

的确更好, 该优化建议由你发起你想发起Pr请求吗?

好,已 PR