본문 바로가기
Android 개발/Coroutine , Flow, Channel

함수 실행 시간 측정 후 Delay 사용하기

by Developer88 2023. 4. 14.
반응형

오늘은 함수의 실행시간을 체크하여서,

특정시간을 지나지 않으면, 

그 만큼 Delay를 시키는 코드를 정리해 보겠습니다.

 

이런 코드는 특히 Splash화면 진행중에 하기에 용이한데요.

예를 들어 Splash를 3초정도 보여주고 싶다면, 

특정 코드를 실행시키고 3초에서 남은 시간을 측정한 후,

나머지 시간만큼 Delay를 부여해 준다음 화면을 보여주기만 하면 되겠지요.

 

1. 함수 실행시간 측정하기

함수의 실행시간 측정은 아래와 같이 할 수 있습니다.

먼저 deleteFiles()라는 함수를 실행하였고요.

바로 직전과 실행후의 시간을 측정합니다.

시간 측정은 system.currentTimeMillis 를 활용하였습니다.

 

아래와 같은 코드를 이용하면, 

최대 시간인 maxTimeMillis로부터,

걸린 시간(elapsedTime)과 남은 시간(remainingTime)을 알아볼 수 있습니다.

 

val maxTimeMillis = 3 * 1000
val startTime = System.currentTimeMillis()
deleteFiles()
val endTime = System.currentTimeMillis()
val elapsedTime = endTime - startTime
val remainingTime = maxTimeMillis - elapsedTime

 

 

2. 남은 시간만큼만 delay 하기

이제 남은 시간에 대해서는 아래와 같이 delay를 사용해주면 되겠습니다.

coroutine을 사용해야 할 텐데요.

아래 코드는 viewModel에서 사용하였으므로,

viewModelScope를 사용해주기만 하면 됩니다.

 

viewModelScope.launch {
    val maxTimeMillis = 3 * 1000
    val startTime = System.currentTimeMillis()
    deleteFiles()
    val endTime = System.currentTimeMillis()
    val elapsedTime = endTime - startTime
    val remainingTime = maxTimeMillis - elapsedTime
    Log.d(TAG, "deleteFilesNotInDb() took: $elapsedTime ms")

    if(remainingTime > 0) delay(remainingTime)
    isResumed = true
    Log.d(TAG, "isLoading: $isResumed")
}

 

이상으로 함수 실행 시간 측정 후 Delay 사용하는 방법에 대해서 정리해 보았습니다.

 

728x90

댓글