안드로이드 개발/개발팁
Queue 구조로 다운로드 하기
Aiden96
2024. 11. 5. 10:01
// 다운로드 대기열을 저장하는 리스트, 두 번째 요소는 Any 타입으로 파라미터로 대체 가능
private val downloadQueue = mutableListOf<Triple<String, Any, Int>>()
var isDownloading = false
fun main() {
// 대기열에 항목 추가
addToDownloadQueue("http://example.com/file1.zip", "day1", 1)
addToDownloadQueue("http://example.com/file2.zip", "day2", 2)
addToDownloadQueue("http://example.com/file3.zip", "day3", 3)
// 특정 pos 값을 가진 항목 제거
removeFromDownloadQueue(2) // Position이 2인 항목을 제거
removeFromDownloadQueue(4) // Position이 4인 항목을 찾을 수 없음
}
// 대기열에 항목을 추가하는 함수
fun addToDownloadQueue(downloadUrl: String, customParam: Any, pos: Int) {
downloadQueue.add(Triple(downloadUrl, customParam, pos))
println("Added to downloadQueue: $downloadQueue")
processDownloadQueue()
}
// 특정 pos 값을 가진 항목을 대기열에서 제거하는 함수
fun removeFromDownloadQueue(pos: Int) {
// 대기열에서 pos 값을 가진 항목을 찾기
val itemToRemove = downloadQueue.find { it.third == pos }
// 항목이 존재하면 제거
if (itemToRemove != null) {
downloadQueue.remove(itemToRemove)
println("Removed item with Position: $pos from downloadQueue")
} else {
println("Item with Position: $pos not found in downloadQueue")
}
println("Current downloadQueue: $downloadQueue")
}
// 대기열을 동기적으로 처리하는 함수
fun processDownloadQueue() {
if (isDownloading || downloadQueue.isEmpty()) return
val (downloadUrl, customParam, pos) = downloadQueue.first()
isDownloading = true
println("Downloading from URL: $downloadUrl, Custom Param: $customParam, Position: $pos")
simulateDownload()
isDownloading = false
downloadQueue.removeAt(0)
processDownloadQueue()
}
// 동기적 다운로드 시뮬레이션 함수
fun simulateDownload() {
Thread.sleep(2000)
}