在生产应用程序中,我们很少看到getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)?.absolutePath
方法调用导致ANR问题的情况。
为了解决这个问题,我们可以使用协程吗?
像这样东西
lifecycleScope.launch {
val envPath = withContext(Dispatchers.IO) { getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)?.absolutePath.orEmpty() }
// code, which will utilize the envPath
}
因为getExternalFilesDir()
方法是ContextWrapper的一部分,所以如果我们使用协程在不同的线程中调用它,它会产生任何问题吗?
1条答案
按热度按时间ttcibm8c1#
getExternalFilesDir使用android.os.storage.StorageManager,这是Android系统服务,StorageManager在单独的进程中执行,因此可能会阻塞很长时间。
Kotlin协同程序:Deep Dive(Dispatchers一章)建议对可能阻塞线程的代码使用Dispatchers.IO。
综上所述,使用getExternalFilesDir的后台线程是完全有意义的。