본문 바로가기

전체 글

(163)
코루틴 플레이그라운드 - 취소 import kotlinx.coroutines.* import kotlin.system.* fun main() { val time = measureTimeMillis { runBlocking{ // 동기 (람다 내의 모든 작업이 완료될 때까지 반환되지 않는다.) println("Weather forecast") try { getWeatherReport() } catch(e: AssertionError) { println("Caught exception in runBlocking(): $e") println("Report unavailable at this time") } println("Have a good day!") } } println("${time/1000.0}") } suspend fun get..
코루틴 플레이그라운드 - 예외처리 import kotlinx.coroutines.* import kotlin.system.* fun main() { val time = measureTimeMillis { runBlocking{ // 동기 (람다 내의 모든 작업이 완료될 때까지 반환되지 않는다.) println("Weather forecast") try { getWeatherReport() } catch(e: AssertionError) { println("Caught exception in runBlocking(): $e") println("Report unavailable at this time") } println("Have a good day!") } } println("${time/1000.0}") } suspend fun get..
코루틴 플레이그라운드 - async import kotlinx.coroutines.* import kotlin.system.* fun main() { val time = measureTimeMillis { runBlocking{ // 동기 (람다 내의 모든 작업이 완료될 때까지 반환되지 않는다.) println("Weather forecast") getWeatherReport() println("Have a good day!") } } println("${time/1000.0}") } suspend fun getForecast():String { // 정지 함수는 모든 작업이 완료된 후에만 반환된다. delay(1000)// 코루틴이나 다른 정지 함수에서만 호출할 수 있다. return "Sunny" } suspend fun getTemp..
코루틴 플레이그라운드 - launch import kotlinx.coroutines.* import kotlin.system.* fun main() { val time = measureTimeMillis { runBlocking{ // 동기 (람다 내의 모든 작업이 완료될 때까지 반환되지 않는다.) println("Weather forecast") launch{ // 작업의 성공 여부와 상관없이 제어 흐름이 반환되면 모든 작업 완료 printForecast() } launch{ printTemperature() } println("Have a good day!") } } println("${time/1000.0}") } suspend fun printForecast() { // 정지 함수는 모든 작업이 완료된 후에만 반환된다. delay(1..
코루틴 플레이그라운드 - 동기 import kotlinx.coroutines.* import kotlin.system.* fun main() { val time = measureTimeMillis { runBlocking{ // 동기 (람다 내의 모든 작업이 완료될 때까지 반환되지 않는다.) println("Weather forecast") printForecast() printTemperature() } } println("${time/1000.0}") } suspend fun printForecast() { // 정지 함수는 모든 작업이 완료된 후에만 반환된다. delay(1000)// 코루틴이나 다른 정지 함수에서만 호출할 수 있다. println("Sunny") } suspend fun printTemperature() { d..
Android 13 POST_NOTIFICATIONS 권한 안드로이드 12 기기까지는 디폴트 알림 권한이 true 안드로이드 13 기기부터는 디폴트 알림 권한이 false 이다. target 32 앱으로는 원하는 시점에 알림 권한을 요청할 수 없다. 대신 알림 채널이 만들어지는 시점에 자동으로 사용자에게 권한 요청창이 발생한다. target 33 앱에서는 원하는 시점에 런타임으로 알림 권한을 요청할 수 있다. 사용자가 "Don't allow" 버튼을 2번 클릭하면 더이상 알림 권한을 묻는 창은 뜨지 않는다. (단, "Allow" 와 "Don't allow" 버튼을 둘 다 누르지 않고 넘어간 경우는 카운팅 되지 않는다.)
안드로이드 네트워크 연결 상태 확인하기 원래는 getNetworkInfo 를 이용하여 네트워크 상태를 가져올 수 있다. 그런데 API29 에서 deprecated 되었다고 하여 새로운 방법을 찾아보았다. class NetworkConnectionStateMonitor(context: Context) : ConnectivityManager.NetworkCallback() { private var context: Context? = null private var networkRequest: NetworkRequest? = null private var connectivityManager: ConnectivityManager? = null init { this.context = context this.networkRequest = NetworkRe..
안드로이드 Splash Screen Disable 처리 결론부터 말하자면 Disable 이 불가능하다. 선택지는 3개가 될 것 같다. 1. 기본 스플래시 표출 -> 기존 스플래시 표출 두개가 순차적으로 보여지며 실제로 이렇게 2개가 뜨는 앱도 많다. Ex) 무신사, 쿠팡, 윌라 오디오북, 오늘의 집 2-1. 기본 스플래시를 투명 처리하고 기존 스플래시만 사용 테마 속성을 통해 기본 스플래시를 투명 처리할 수 있다고는 하지만, 말그대로 투명처리일 뿐 실제 동작이 스킵되는 것은 아니기 때문에 오히려 앱 시작 속도가 느리다고 생각될 것 같다. 투명이 아니더라도 아이콘 없이 흰색, 검은색으로 보여주고 기존 스플래시 화면이 나오는 경우도 있는 듯하다. Ex) 카카오 페이지(검정 화면), 요기요 (흰 화면) 더보기 이렇게 하면 투명처리 된다했는데 나는 아무리 해도 안됨..