액티비티

1 minute read

액티비티란?

액티비티는 앱을 만드는 주요 요소 중 하나로, 사용자와 상호작용을 하기 위한 진입점 역할을 한다. 쉽게 말하면, 유저에게 보이고 상호작용을 하는 하나의 화면을 의미한다.

picture 1 picture 2 picture 3
  이렇게 사용자 눈에 보이고 상호작용이 가능한 화면을 액티비티가 구성한다  

백스택

사용자와 상호작용하는 하나의 화면을 액티비티라고 하는데, 안드로이드 앱은 하나의 화면만을 가지고 있지 않다. 앱 내의 다른 화면으로 이동하기도 하는데, 내부적으로는 화면에 보여지는 액티비티를 전환하는 것이다. 화면에 보여지는 액티비티를 포그라운드 액티비티라고 부른다. 또 액티비티는 스택으로 관리되며, 이를 백스택이라고 부른다.

picture 4
백스택

액티비티가 시작되면 백스택에 푸시되고 포그라운드 액티비티가 된다. 사용자가 뒤로 버튼을 누를 시 액티비티는 백스택에서 팝되어 파괴된다.

생명 주기

백그라운드 액티비티가 메모리 상에서 계속 동작을 하고 있다면 자원 낭비가 심할 것이다. 액티비티는 스택에 쌓이고 빠질 때 생성되고 파괴되는 생명 주기를 가진다. 액티비티의 상태는 6가지로, 각각의 상태로 이동할 때 콜백 메서드가 호출된다.

picture 5
생명 주기와 콜백 함수

Created – onCreate()

메모리에 존재하는 상태로, onCreate 메서드가 호출된다.

  • 위젯을 inflate에 객체 생성 후 화면에 보여준다.
  • 사용자와의 상호작용을 처리하기 위해 listener를 설정한다.
  • 외부의 모델 데이터를 연결한다.

    Started – onStart()

    다중 창 모드에서 앱이 선택되는 경우

  • 애니메이션, 데이터 갱신 시작

    Resumed – onResume()

    오버뷰 화면에서 액티비티를 선택하는 경우

  • 사용자와 상호작용 가능

    Paused – onPause()

    사용자가 다중창 모드를 시작해서 다른 앱이 사용중인 경우

  • 상호자와 상호작용 불가능

    Stopped – onStop()

    홈버튼을 눌러 다른 앱을 사용할 때

  • 이때부터 액티비티는 종료 대상에 포함됨

    Destroyed – onDestroy()

    뒤로 버튼을 눌러 앱을 종료시킬 때
    오버뷰 화면에서 해당 앱을 목록에서 제거할 때

  • 해제되지 않은 리소스 해제

    Inflate

    안드로이드 프로젝트에서 액티비티를 생성하면 코틀린(또는 자바) 파일과 xml 파일 두 파일이 만들어진다.

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

XML 파일은 액티비티의 UI를 구성한다. UI는 뷰와 뷰그룹으로 구성돼있으며, 사용자에게 보이는 요소 하나 하나(텍스트뷰, 버튼 등)은 모두 뷰를 상속한 것이다. 코틀린의 액티비티 클래스 내의 onCreate 메서드 내에서 setContentView를 호출해 XML 파일 내의 뷰들을 인스턴스화한다. 이를 inflate라고 부르며, inflate 과정 이후에는 Resource ID를 인자로 받아 각각의 뷰 객체의 참조를 얻어 접근할 수 있다.

Comments