Kotlin Coroutines: насколько легкими являются объекты Kotlin Job ()? Могу ли я оставить готовые вакансии в HashMap? - PullRequest
0 голосов
/ 12 июня 2019

Я пишу простой класс, который может загружать изображения и записывать их в кеш. Если один URL запрашивается дважды, любое существующее задание на загрузку этого файла должно быть отменено.

Могу ли я просто использовать HashMap и сохранять запущенные задания? Или это приведет к утечкам памяти, если готовые задания все еще находятся в HashMap?

Вот некоторые фрагменты из моего кода:

HashMap:

val jobs = HashMap<Int, Job>()

Cache Fun:

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)
    }
}

...