You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决getAdvertisingIdInfo方法的‘Inappropriate blocking method call’警告?

解决Kotlin协程中调用AdvertisingIdClient的阻塞方法警告问题

问题原因

AdvertisingIdClient.getAdvertisingIdInfo()是一个阻塞式IO操作,你当前使用Dispatchers.Default(专为CPU密集型任务设计的调度器)来包裹这个方法,IDE会识别到这是不合适的阻塞调用——Default线程池的核心作用是处理计算类任务,用来执行IO阻塞操作会浪费线程资源,因此触发警告。

解决方案

将调度器替换为Dispatchers.IO,这个调度器专门用于处理文件读写、网络请求等阻塞IO任务,能更合理地管理线程资源,同时消除IDE的警告。

修改后的代码如下:

private suspend fun getAdvertisingId(): String? {
    return withContext(Dispatchers.IO) {
        try {
            AdvertisingIdClient.getAdvertisingIdInfo(ohmeApp.applicationContext).id
        } catch (exception: Exception) {
            "" // 处理其他异常情况
        }
    }
}

额外说明

如果替换调度器后仍有警告,可以通过添加@Suppress("BlockingMethodInNonBlockingContext")注解临时压制,但不推荐这种做法——它只是隐藏警告,没有解决线程资源不合理使用的本质问题,优先使用Dispatchers.IO才是正确的处理方式。

内容的提问来源于stack exchange,提问作者BRDroid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:00:56