본문 바로가기
Android

[Kotlin] 개발할때 알아야할 LifeCycle

by bryan.oh 2023. 7. 24.
반응형

 

자세한 내용은 공식 설명을 확인하시고,

여기에서는 간단하게. 어떨때 어떤 함수가 호출되는지 알아보겠습니다.

우선 Activity 를 하나 만들었습니다.

package com.example.test01

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.example.test01.databinding.ActivityLifeBinding

class LifeActivity : AppCompatActivity() {
    val tag = "LifeActivity"
    lateinit var binding: ActivityLifeBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        Log.d(tag, "onCreate()")
        super.onCreate(savedInstanceState)
        binding = ActivityLifeBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        binding.lifeFinishButton.setOnClickListener {
            finish()
        }
    }

    override fun onStart() {
        Log.d(tag, "onStart()")
        super.onStart()
    }

    override fun onResume() {
        Log.d(tag, "onResume()")
        super.onResume()
    }

    override fun onPause() {
        Log.d(tag, "onPause()")
        super.onPause()
    }

    override fun onStop() {
        Log.d(tag, "onStop()")
        super.onStop()
    }

    override fun onDestroy() {
        Log.d(tag, "onDestroy()")
        super.onDestroy()
    }
}

 

그리고 이 Activity 가 실행되었을 때 실행되는 함수는 순서대로.

onCreate()
onStart()
onResume()

 

다른 앱을 실행하기 위해, 현재 앱을 최소화(=백그라운드 작업으로 전환) 했을 때 실행되는 함수도 아래 순서대로.

onPause()
onStop()

 

그리고, 백그라운드에 있던 이 앱을 띄우면, 아래 함수들이 순서대로 실행됩니다.

onStart()
onResume()

 

Finish 버튼을 눌러서 이 Activity를 종료하면,

onPause()
onStop()
onDestroy()

 

이렇게 실행되는것만 잘 기억해주세요.

예를들어, 카메라나 무거운 CPU/GPU 작업이 진행중인 앱은 onPause() 에서 잠깐 멈추고,

onResume() 에서 다시 실행하도록 하면, 리소스를 효율적으로 관리할 수 있을 겁니다.

이런것을 무시하고 개발을 한다면, 배터리 많이 잡아먹는 앱 1위를 하실 수 있겠죠.

 

여기까지는 꼭 알아야 하는 부분이고요.

 

시간되시고 더 알고 싶다면 계속해서 읽어주세요.

 


아래부터는 조금 더 자세히 알아보겠습니다.

위에서 onStart(), onResume() 이 항상 같이 실행되는데, 차이점을 알아보겠습니다.

onStart():

  • 액티비티가 사용자에게 보여지기 직전에 호출됩니다.
  • 액티비티가 생성되고 onCreate()가 호출된 이후에 onStart()가 호출됩니다.
  • 액티비티가 화면에 표시되기 전에 필요한 초기화 작업을 수행할 수 있습니다.
  • onStart() 이후에 액티비티가 화면에 표시되고 사용자와 상호작용할 준비가 완료됩니다.


onResume():

  • 액티비티가 사용자와 상호작용할 수 있는 상태가 될 때 호출됩니다.
  • onStart() 이후에 onResume()이 호출되며, 화면이 완전히 보이고 사용자와의 상호작용이 가능한 상태입니다.
  • onResume()에서는 사용자 입력을 처리하거나, 백그라운드 상태로부터 복구하는 등 액티비티의 동작을 계속 진행할 수 있습니다.
  • 액티비티가 포그라운드로 올라오고 사용자와 상호작용을 시작해야 하는 경우 이 단계에서 작업을 수행해야 합니다.
요약하면,
onStart()은 액티비티가 사용자에게 보여지기 시작하는 단계이며 초기화 작업에 사용됩니다.
onResume()은 액티비티가 사용자와 상호작용할 수 있는 상태로 완전히 전환된 단계이며, 사용자 입력을 처리하거나 백그라운드 상태로부터 복구하는 작업에 사용됩니다.

 

 

다음은 onPause() 와 onStop() 입니다.

onPause():

  • 액티비티가 포그라운드에서 백그라운드로 전환될 때 호출됩니다.
  • 예를 들어, 다른 액티비티가 포그라운드로 나타나거나, 현재 액티비티가 다이얼로그나 팝업 창과 같은 요소로 인해 일시적으로 가려지는 상태일 때 호출됩니다.
  • onPause()가 호출되면 액티비티는 여전히 부분적으로 보일 수 있지만, 사용자와의 상호작용이 불가능한 상태입니다.
  • onPause()에서는 사용자와의 상호작용을 중지하고 액티비티의 상태를 저장하는 등의 작업을 수행해야 합니다.


onStop():

  • 액티비티가 더 이상 사용자에게 표시되지 않고 화면에서 완전히 가려진 상태일 때 호출됩니다.
  • 다른 액티비티가 포그라운드로 올라오거나 액티비티가 백그라운드로 이동하는 경우에 호출됩니다.
  • onStop() 이후에 액티비티는 사용자에게 보이지 않으며, 일반적으로 시스템 리소스를 해제하는 등의 종료 작업을 수행합니다.
  • 다시 액티비티가 포그라운드로 올라오면 onRestart()를 거쳐서 onStart()가 호출됩니다.
요약하면, 
onPause()는 액티비티가 포그라운드에서 백그라운드로 전환되는 단계이며, 사용자와의 상호작용을 중지하고 상태를 저장하는 등의 작업에 사용됩니다.
onStop()은 액티비티가 더 이상 사용자에게 표시되지 않고 완전히 가려지는 단계이며, 리소스를 해제하거나 종료 작업을 수행하는데 사용됩니다.

 

 

 

728x90
반응형

댓글