티스토리 뷰

728x90

 


Activity

• 화면을 구성하는 가장 기본이 되는 요소

• 자동으로 activity와 매칭되는 xml을 생성 + manifest에 등록

• 화면을 그리는 기능 + 화면에서 발생할 수 있는 일들을 처리할 수 있는 기능이 내장

• 앱이 실행될 때 최초로 실행되는 activity를 main activity 또는 launcher activity라고 한다.

 

1. Activity의 Lifecycle(생명주기)

안드로이드 activity의 생명주기

• onCreate(savedInstanceState)

     - 필수적으로 구현해야 한다.

     - 생명주기 중에서 단 한 번만 발생한다. -> 단 한 번만 하면 되는 일들을 여기 구현한다.

     - 초기 화면 그리기, 데이터 준비 등의 일을 한다.

     * savedInstanceState : 사용자가 액티비티에서 바꾸었던 정보들을 저장해놓는 곳. 나중에 불러와서 다시 원래의 액티비티로 돌려놓을 수 있도록 한다.

• onStart()

     - activty를 포그라운드로 보내 상호작용할 수 있도록 준비

          * 포그라운드 : 사용 중일 때. = 사용자 눈에 보일 때.

     - 매우 빠르게 완료가 된다. -> 너무 무거운 작업을 onStart에서 하면 Lifecycle에 문제가 생길 수 있다.

• onResume()

     - 앱이 사용자와 상호작용이 가능한 상태

     - 특정 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 이 상태에 머무른다.

          * 특정 이벤트 : 전화가 온다, 기기 화면이 꺼진다.

          * 앱에서 포커스가 떠난다 : 화면이 가려진다.

• onPause()

     - 사용자가 activity를 떠나는 것을 나타내는 첫 번째 신호

     - activty가 포그라운드에 있지 않다는 신호 -> (백그라운드 상태거나, 앱 위에 앱이 있는 상태)

     - 잠시 작업 중지해야 하는 일들을 일시 중지한다. ex) 영상 일시 중지

• onStop()

     - activity가 더 이상 사용자에게 표시가 되지 않는 상태

          - 새로운 activity가 나오는 경우

          - 화면이 가려지는 경우

     - 사용자에게 보이지 않는 동안 앱은 리소스를 해제 해야한다.

          ex) 영상 종료, GPS 종료

     - 소멸되기 전 마지막으로 해야 할 일 등을 수행

          ex) 저장

• onRestart

     - onStop 상태에서 화면을 다시 켠 경우

     - onStart로 돌아가기 전에 onRestart가 실행된다. 

• onDestroy

     - activty가 소멸되기 전에 호출된다.

          ex) 앱 종료 등

     - onStop에서 해제되지 않은 모든 리소스를 해제해야 한다.

     * 기기 회전, 멀티 윈도우 모드로 전환 등은 activity를 소멸시키고 다시 켜는 것이다.

 

• 모든 사이클을 관리할 필요는 없고, 필요한 용도가 있을 때만 오버라이드해서 사용하면 된다.

* 안드로이드 OS가 activity를 직접 종료시키는 일은 없다.

     - 다만, 프로세스(진행 중인 작업)는 종료가 가능하다.

 

2. Activity 생성

• app 모듈에 TestActivity.kt라는 빈 액티비티 생성.

액티비티 생성

     - res -> layout 폴더에 TestActivity의 화면 구성 파일인 activity_test.xml 자동 생성됨.

     - 모듈의 설계도 역할을 하는 AndroidManifest.xml 파일에도 activity가 자동 등록됨.

액티비티를 생성했을 때 자동 생성 - layout에 activity_test.xml 자동 생성(왼쪽), AndroidManifest.xml에 activity 자동 등록(오른쪽)

 

3. Activity 내부

package com.example.fastcampus

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class TestActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_test)
    }
}

• TestActivity라는 액티비티가 어떤 동작을 할 것인지 정의하는 TestActivity 클래스가 선언되어 있다.

• 생성한 액티비티는 'Activity -> ComponentAcitivity -> FragmentActivity -> AppCompatActivity -> 생성한 액티비티'의 순서로 상속받으며, 이로인해 액티비티를 구현하기 위한 틀이 구성된다. 덕분에 개발자는 액티비티를 구현하기 위해 모든 코드를 하나하나 작성하지 않아도 안드로이드에서 제공해주는 규칙(수명주기 등)에 따라 코드를 작성하면 액티비티를 구현할 수 있다.

• 필수적으로 구현되어야 할 onCreate 함수가 구현되어 있다. 애플리케이션 사용 중 TestActivity가 실행될 때, 액티비티가 처음 생성되면서 실행될 것들을 구현한다.

• super.onCreate : 액티비티가 생성되어 동작하기 위해 구현해야 할 코드들이 적힌 부모 onCreate 함수를 불러온다.

• setContentView : 간단히 말하면 activity_test 레이아웃으로 화면을 구성하는 명령어이다.

• Log.d를 이용하여 MainActivity.kt의 생명주기를 확인해보면 다음과 같다.

package com.example.fastcampus

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.d("LifeCycle", "onCreate")
    }

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

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

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

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

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

    override fun onRestart() {
        super.onRestart()
        Log.d("LifeCycle", "onRestart")
    }
}

애플리케이션을 실행하면 첫화면인 MainActivity가 생성되면서 onCreate, onStart, OnResume이 실행된다.
화면을 내리면 onPause와 onStop이 실행된다.
화면을 다시 올리면 onRestart를 거쳐서 onStart와 onResume이 다시 실행된다.
앱을 종료하면 onPause, onStop, OnDestroy가 실행된다.

 

 

 

 

 

 

 

이 글은

패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online

강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.

 


728x90
댓글
공지사항