我正在编写一个简单的类,该类可以下载图像并将其写入缓存。如果两次请求一个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)
}
}