如何解决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
相关产品推荐
相关产品推荐

