Android kotlin各种起用协程的区别

  1. GlobalScope.launch(Dispatchers.IO) {}
  2. GlobalScope.launch{}
  3. CoroutineScope(Dispatchers.IO).launch{}
  4. lifecycleScope.launch(Dispatchers.IO){}
  5. lifecycleScope.launch{}

首先了解一下Dispatchers各种区别:

  • Dispatchers.Default:CPU 密集型工作,例如对大型列表进行排序、进行复杂计算等。JVM 上的共享线程池支持它。

  • Dispatchers.IO:网络或文件读写。简而言之——顾名思义,任何输入和输出

  • Dispatchers.Main:在 Android 的主线程或 UI 线程中执行 UI 相关事件的强制调度程序。

1-GlobalScope.launch(Dispatchers.IO) {}只要您的应用程序还活着,GlobalScope 就一直存在,通常不鼓励这样子使用,因为必须手动维护join()或者cancel()

2-GlobalScope.launch{}它与第一个相同,但默认情况下,如果您没有任何上下文,则启动使用 Dispatchers.Default 的 EmptyCoroutineContext。

3-CoroutineScope(Dispatchers.IO).launch{}这个和第一个一样,只是语法不同。

4-lifecycleScope.launch(Dispatchers.IO){} lifecycleScopeLifeCycleOwner对 Activity 或 Fragment 的生命周期的扩展和绑定,其中当该 Activity 或 Fragment 被销毁时范围被取消。

/**
 * [CoroutineScope] tied to this [LifecycleOwner]'s [Lifecycle].
 *
 * This scope will be cancelled when the [Lifecycle] is destroyed.
 *
 * This scope is bound to
 * [Dispatchers.Main.immediate][kotlinx.coroutines.MainCoroutineDispatcher.immediate].
 */
val LifecycleOwner.lifecycleScope: LifecycleCoroutineScope
    get() = lifecycle.coroutineScope

5-lifecycleScope.launch(){}同上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,利用Kotlin语言和程可以很方便地遍历系统相册。以下是一个简单的示例代码: ```kotlin import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import java.io.File // 获取系统相册文件夹路径 fun getDCIMFolderPath(): String { val dcimDir = File("/storage/emulated/0/DCIM") return if (dcimDir.exists()) { dcimDir.absolutePath } else { "" } } // 遍历相册文件夹中的所有图片文件 suspend fun getDCIMImages(): List<File> = withContext(Dispatchers.IO) { val dcimFolderPath = getDCIMFolderPath() if (dcimFolderPath.isEmpty()) { return@withContext emptyList<File>() } val dcimDir = File(dcimFolderPath) val imagesDeferred = dcimDir.listFiles()?.map { file -> async { if (file.isFile && file.extension in listOf("jpg", "jpeg", "png", "bmp")) { file } else { null } } } ?: emptyList() return@withContext imagesDeferred.awaitAll().filterNotNull() } // 在程中遍历相册,并输出每张图片的路径 fun main() = runBlocking { val images = getDCIMImages() images.forEach { image -> println(image.absolutePath) } } ``` 在这个示例代码中,我们首先通过`getDCIMFolderPath()`函数获取系统相册文件夹的路径,然后使用`withContext(Dispatchers.IO)`来在IO线程中遍历相册文件夹中的所有图片文件。我们使用`async`函数来并发地获取每个图片文件,并将它们存储在一个Deferred列表中。最后,我们使用`awaitAll()`函数来等待所有Deferred对象完成,并使用`filterNotNull()`函数来过滤掉空文件对象。最终,我们在`main()`函数中遍历所有图片文件,并输出它们的路径。 需要注意的是,这个示例代码仅演示了如何遍历系统相册文件夹中的图片文件,实际应用中还需要处理文件读取、异常情况等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值