Kotlin协程:Kotlin Job()对象的轻量化程度如何?我可以将完成的作业留在HashMap中吗?

时间:2019-06-12 15:34:36

标签: kotlin kotlin-coroutines

我正在编写一个简单的类,该类可以下载图像并将其写入缓存。如果两次请求一个URL,则应取消该文件的任何现有下载作业。

我可以只使用HashMap并存储正在运行的Jobs吗?如果完成的Jobs仍在HashMap中,还是会导致内存泄漏?

以下是我的代码中的一些片段:

哈希图:

val jobs = HashMap<Int, Job>()

缓存乐趣:

fun doCache(url: String) {
    val hash = url.hashCode()
    jobs[hash]?.cancel()
    val job = Job()
    jobs[jobTag] = job

    val cached = File(cacheDir, "img-$hash.dat")
    CoroutineScope(Dispatchers.IO + job).launch {
        download(url, cached)
    }
}

0 个答案:

没有答案