Apple is Apple
article thumbnail
Published 2023. 8. 2. 15:57
[Android] Activity Lifecycle - 2 Android

지난 글에 이어서 이번에는 직접 생명주기 메소드를 사용하여 안드로이드 스튜디오에서 실행해보며 어떤 순서로 동작하는 지 알아보자

 

먼저 생명주기 호출 함수를 override하여 내부에서 로그를 찍어보며 확인하도록 로그를 찍어보았다.

 

MainActivity.kt

더보기
package com.example.myapplication

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.i(TAG, "onCreate()")
        val btn = findViewById<Button>(R.id.button1)
        btn.setOnClickListener {
            startActivity(Intent(this, SecondActivity::class.java))
        }
    }
    override fun onStart() {
        super.onStart()
        Log.i(TAG, "onStart()")
    }

    override fun onResume() {
        super.onResume()
        Log.i(TAG, "onResume()")
    }

    override fun onPause() {
        super.onPause()
        Log.i(TAG, "onPause()")
    }

    override fun onStop() {
        super.onStop()
        Log.i(TAG, "onStop()")
    }

    override fun onRestart() {
        super.onRestart()
        Log.i(TAG, "onRestart()")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.i(TAG, "onDestroy()")
    }

    companion object {
        const val TAG = "First Activity"
    }
}

 

SecondActivity.kt

더보기
package com.example.myapplication

import android.annotation.SuppressLint
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button

class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        Log.i(MainActivity.TAG, "onCreate()")
        val btn = findViewById<Button>(R.id.button2)
         btn.setOnClickListener {
            startActivity(Intent(this, MainActivity::class.java))
        }
    }
    override fun onStart() {
        super.onStart()
        Log.i(TAG, "onStart()")
    }

    override fun onResume() {
        super.onResume()
        Log.i(TAG, "onResume()")
    }

    override fun onPause() {
        super.onPause()
        Log.i(TAG, "onPause()")
    }

    override fun onStop() {
        super.onStop()
        Log.i(TAG, "onStop()")
    }

    override fun onRestart() {
        super.onRestart()
        Log.i(TAG, "onRestart()")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.i(TAG, "onDestroy()")
    }
    companion object{
        const val TAG = "Second Activity"
    }
}

 

먼저, 앱 첫 진입이다.

생명주기 그래프처럼 액티비티가 running 상태로 가기전까지 onCreate() -> onStart() -> onResume()이 호출된 것을 볼 수 있다.

Main -> Sub

이제, Main Activity에서 Second Activity로 가보자

Main Activity의 버튼을 누르면 MainActivity가 먼저 pause되고 SecondActivity가 실행되기 시작한다. Second Activity가 완전이 실행되고 나서야 Main Activity가 stop이된다. 

이 점을 주의해서 보아야 할 것 같다.

우리가 앱을 눈으로 봤을 때는 Main Activity가 완전히 사라지고 Second Activity가 실행 되는 것 처럼 보이는데 생명주기로는 전혀 그렇지 않다는 것이다. (onPause -> onStop -> onCreate(new activity))

 

왜인지 한 번 찾아보았다. (gpt 사용)

이렇다고 한다. 즉,  onPause -> onStop -> onCreate로 동작을 하게되면 이전 액티비티에서 onStop()이 오래걸릴 경우 onCreate()도 오래 걸리니 새로운 액티비티가 보이는데 까지 시간이 지연되어 사용자 경험을 떨어뜨린다고한다. 

 

이해는 하였는데 gpt가 아닌 영문 검색으로도 한 번 찾아봐야겠다는 생각이 든다. (한국어 검색은 결론을 찾기 힘들었음)

Sub -> Main

다시 돌아와서 Second Activity에서 Main Activity로 올 때의 생명주기를 살펴보자

Main Activity에서 Second Activity로 온 것과 같게 동작을 하였다.

 

 

 

Main -> Home -> Main

이번엔 Main Activity에서 홈화면으로 나갔다가 다시 돌아온 케이스이다.

밑줄 친 부분이 홈 화면으로 나갔을 때의 호출된 생명 주기이다. onPause -> onStop이 불려 액티비티가 Stop상태가 된다.

다시 돌아오면 onRestart()가 불려 액티비티가 재시작된다.

 

OTHER 

이외에도 멀티 윈도우가 켜졌을 때의 생명주기 공유 버튼을 눌러서 액티비티의 일부만 가려졌을 떄의 생명주기

다양한 상황이 있을 것이다. 지금은 정말 간단한 상황에서만의 생명주기를 다루어보았지만 복잡한 생명주기를 다룰 때에는 이렇게 로그를 확인해가면서 생명주기에 맞게 프로그램을 구성하면 될 것이다.

 

 

결론

Activity Lifecycle를 잘 이해하고 활용하는 것은 안드로이드 개발에 있어 중요한 부분이다. 이를 통해 사용자들에게 편리하고 안정적인 앱을 제공하며, 앱의 성능과 사용성을 높일 수 있다.

따라서 액티비티 생명주기에 대한 이해를 바탕으로 앱 개발에 임하는 것이 앱의 성공에 큰 도움이 될 것이라 생각한다.

profile

Apple is Apple

@mjjjjjj