Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 1회용 플라스틱컵
- 비콘스캐닝
- apk이름변경
- TwomonUSB
- 안드로이드 sms
- var 와 val
- #큐구조 #큐다운로드
- 1회용컵
- 안드로이드 비콘
- json 저장
- 안드로이드 스튜디오 애뮬레이터
- 모의위치 주입
- 안드로이드 mvvm
- bluetoothmanager
- 코틀린 이미지저장 #파일저장
- 셀룰로오스-g-폴리락타이드 공중합체
- 안드로이드스튜디오 jdk
- 라이브데이터 postValue
- 토글 험수
- compse state
- TowmonUSB 연결오류
- 스레드 #코루틴
- compse collectAsState
- 코틀린 트리거 버튼
- Room 데이터베이스 업데이트
- 커스텀스피너
- withContext
- 플라스틱 생분해
- 코루틴 job
- viewmodelscope
Archives
- Today
- Total
EnjoyLife
코루틴 + Job은 언제 사용할까 본문
기능 예시 | 왜 코루틴+Job이 필요한가요? |
⏱ 타이머 기능 | 중간에 멈추거나 재시작할 수 있어야 해서 |
📡 API 요청 중 사용자가 뒤로 가면 중단 | Job으로 취소 가능해야 함 |
📥 파일 다운로드/업로드 진행 관리 | 중간에 job.cancel()로 멈출 수 있어야 함 |
🧹 자동 저장 / 자동 백업 | 주기적인 반복 작업 (delay + 반복 + 취소) |
⏳ ProgressBar와 연동된 딜레이 애니메이션 | 애니메이션을 멈출 수 있어야 함 |
🎮 게임에서 일정 시간마다 이벤트 발생 | 반복 실행 + 일시중지 가능해야 함 |
🔍 입력 중 실시간 검색 (디바운싱) | 이전 Job을 취소하고 새 검색 시작 |
🔕 알림 예약 후 조건 만족 시 취소 | 예약된 코루틴 취소해야 함 |
🔧 왜 그냥 코루틴 만 쓰지 않고 Job까지 써야 하나요?
상황 | Job이 필요한 이유 |
작업 중에 취소(cancel) 해야 할 때 | job.cancel()로 즉시 멈출 수 있음 |
여러 작업 중 하나만 유지하고 나머지 중단 | 이전 job.cancel() 후 새 작업 시작 |
타이머처럼 상태를 관리하면서 작동해야 할 때 | 시작 → 동작 중 → 종료 상태 분리 가능 |
🎯 실전 예시: 검색창 자동 추천
private var searchJob: Job? = null
fun onSearchTextChanged(query: String) {
searchJob?.cancel() // 이전 검색 취소
searchJob = viewModelScope.launch {
delay(500) // 디바운스
val result = searchApi(query)
_searchResult.postValue(result)
}
}
✅ 사용자가 빠르게 타이핑할 때마다 이전 검색을 취소하고,
마지막 입력에만 검색을 실행할 수 있어요.
✅ 정리 요약
언제 코루틴 + Job을 쓰면 좋을까?
⏱ 타이머 만들 때 |
📶 API 요청을 도중에 멈추고 싶을 때 |
🌀 반복되는 작업을 중간에 끊고 싶을 때 |
🧠 여러 코루틴 중 하나만 유지하고 싶을 때 |
🎮 유저 입력에 따라 작업을 덮어쓰기 하고 싶을 때 |