본문 바로가기
안드로이드 개발일지

[kotlin/안드로이드] 백그라운드에 있다가 돌아오는 시간 계산하기System.currentTimeMillis 초/분/시 시간 계산

by 응디잉 2023. 3. 30.

 

 

개발 요청 사항 

 : 백그라운드에 1시간 이상 있다가 앱 재실행시 메인 액티비티로 돌아가게끔 해주세요!!!!!

 

ㅡㅜㅡ

 

액티비티의 생명주기를 생각 했을때 앱이 Background 넘어가게되면 onPause 

완전히 종료하는게 아니라 잠시 백그라운드로 둔 상태의 경우를 말한다.

앱을 재 실행해서 Foreground 로 돌아오는 경우 onResume 으로 돌아가게된다 .

개념적으로 정리하면 onPause 가 실행되었을때 현재시각 저장 

onResume 으로 돌아왔을때 현재시각이랑 저장된 시간의 차이로 얼마나 지났는지 시간 계산을 함

 

 

 

전체코드 

 

 

override fun onPause() {
    super.onPause()
    backgroundTime = System.currentTimeMillis() // 백그라운드로 이동 당시 현재 시간 저장
}

override fun onResume() {
    super.onResume()
    val foregroundTime = System.currentTimeMillis() - backgroundTime // 백그라운드에 머무른 시간 계산
    val foregroundTimeInSeconds = foregroundTime / 1000

    if(backgroundTime > 0 && foregroundTimeInSeconds>5) { // 테스트용으로 5초 설정
        val intent = Intent(this, MainActivity::class.java) // 커스텀 (이동하고싶은 액티비티)
        intent.putExtra("url", Global.BASE_URL)			// 나는웹뷰라서 메인페이지 URL 띄움
        startActivity(intent)
    }
}

 

--> System.currentTimeMillis() 의 단위는 밀리세컨드! 

로그로 시간단위가 밀리세컨드라고 생각하면 된다.

 

 

System.currentTimeMillis() = 1000 = 1초 

 

따라서 /1000의 단위를 계산해서 초로 일단 계산!!

 

백그라운드타임은 처음 실행했을때 0의 값을 가지고 있기때문에 0보다 큰 조건까지 넣어줘서 구현 

 

System.currentTimeMillis / 1000 = 1초 

System.currentTimeMillis / 1000 * 60 = 1분 

System.currentTimeMillis / 1000 * 60 * 60 = 1시간

 

이렇게 변환하여서 사용하면 끝!

 

 

조건문 사이에는 원하는 동작을 띄워놓을 수 있음 

스플래시 화면을 띄운다던가, 특정 액티비티로 이동한다던가, 토스트메시지나 알럿창을 띄운다던가 등등

댓글