본문 바로가기
TIL/Android

Activity

by J1-H00N 2024. 4. 24.

안드로이드 4대 구성요소

안드로이드 애플리케이션은 아래 4 종류의 독립적인 다양한 실행 단위를 하나로 묶어 관리한다.

  • Activity : 현재 화면을 관리하는 실행요소
  • Service : 화면을 가지지 않는 실행 단위, := 백그라운드
  • Broadcast Receiver : 특정 사건이 발생하면 실행되는 실행 단위
  • Content Provider : 데이터 공유를 위한 실행 단위

 

Intent

  • 안드로이드 4대 구성 요소들을 실행하기 위해서는 intent라는 객체가 필요하다.
  • intent는 실행하고자 하는 4대 구성 요소와 관련된 정보를 가지고 있다.
  • 개발자가는 실행하고자 하는 4대 구성 요소의 정보를 intent에 담고 이를 안드로이드 OS에게 전달하면 안드로이드 OS에 의해 해당 구성 요소가 실행된다.

 

Logcat

Log.d/e/i/v/w를 통해 Logcat에서 시스템 메시지를 출력할 수 있는데, d는 디버그, i는 정보, v는 변수, e는 에러, w는 경고용으로 자주 쓰인다. tag를 통해 필터링도 가능하다.

 

Activity

  • 현재 화면을 관리하는 실행 단위
  • 애플리케이션을 실행하면 Activity가 실행되고 Activity가 관리하는 화면이 나타나게 된다.
  • 생명주기가 있으며 각 주기 때 자동으로 호출되는 메서드를 제공한다.

Activity의 생명주기

  • Activity의 실행 및 종료
    • startActivity : 지정된 Intent에 담긴 정보를 토대로 Activity를 실행한다.
    • finish : 현재 실행되어 있는 Activity를 종료한다.
  • Back Stack
    • Activity에서 다른 Activity를 실행하면 이전 Activity는 Back Stack에 담겨 정지 상태가 되고 새로 실행된 Activity가 활동하게 된다.
    • 새로 실행된 Activity가 제거 되면 Back Stack에 있던 Activity가 다시 활동하게 된다.
    • 말 그대로 Stack과 동일한 형태로 Activity를 관리하는 것
  • onActivityResult
    • Activity에서 다른 Activity를 실행하고 다시 돌아왔을 때 어떤 처리가 필요하다면 Acitivity를 실행할 때 startActivity가 아닌 startActivityForResult 메서드를 사용한다.
    • 이 메서드를 이용해 Activity를 실행하고 돌아오면 자동으로 onActivityResult가 실행된다.
    • 다시 돌아올 때 결과값으로 기본값(RESULT_OK, RESULT_CANCELED)이나 사용자 정의값(ex. RESULT_FIRST, ...)을 반환할 수 있다.
    • 어떤 Activity를 갔다가 돌아오든 이 메서드가 실행되면 코드 관리가 복잡해지고, 이 메서드 내에서 모든 상황을 처리해야 한다. 이는 너무 비효율적이므로, 최근에는 구글에서 제공하는 registerForAcitivityResult를 onActivityResult와 startActivityForResult 대신에 사용한다.
    • registerForAcitivityResult는 다수의 액티비티 실행을 분리해 관리할 수 있다는 장점을 가지고 있다.

 

데이터 전달하기

  • 액티비티를 실행하기 위해 사용하는 Intent 객체에 데이터를 저장할 수 있다.
  • putExtra 메서드를 통해 데이터 저장이 가능하며 데이터가 저장된 Intent는 실행되는 액티비티까지 전달된다.
  • Intent는 액티비티를 종료하고 돌아갈 때도 전달 할 수 있다.
  • 전달된 Intent에 저장된 데이터는 get~~Extra 메서드를 통해 추출할 수 있다.
  • 이 메서드는 자료형 별로 이름이 다르므로 자료형에 맞는 메서드를 사용해야 한다.

 

객체 전달하기

  • Intent를 통해 객체를 전달 할 때는 객체 직렬화를 해야 하는데 안드로이드는 Parcelable 인터페이스를 사용한다.
  • Parecelable 인터페이스는 전달 받은 쪽에서 객체를 복원할 때 필요한 정보를 가진 부분을 의미한다.
  • getParcelableExtra : Parcel 객체를 추출하는 메서드
  • 위 메서가 호출될 때 CREATOR.createFromParcel 메서드를 호출해 메서드가 반환하는 객체를 전달해준다. 그러면 해당 메서드는 객체를 새롭게 생성하고 Parcel에 저장되어 있는 값을 추출해 객체의 변수에 담아넣어서 객체를 복원하고 반환하는 작업을 수행한다.
  • writeToParcel : 객체를 Intent에 저장하려고 할 때 자동으로 호출되는 메서드
  • 위 메서드의 첫 번째 매개변수로 전달되는 Parcel 객체가 Intent에 담기고 이 Parcel 객체가 다른 액티비티로 전달된다.
  • 그러면 다른 액티비티에서 새로운 객체를 생성하고 그 객체에 전달받은 값을 저장한다.

 

다른 애플리케이션의 액티비티 실행하기

  • 안드로이드 4대 구성요소는 모두 AndroidManifest.xml 파일에 기록되어야 한다.
  • 이때 다른 애플리케이션이 실행할 수 있도록 하고자 한다면 Intent filter를 이용해 이름을 설정해주면 된다.
  • 애플리케이션이 단말기에 설치되면 안드로이드 OS는 지정된 Intent Filter의 이름을 확인하여 정리하고 실행 요청을 받으면 이를 실행할 수 있다.

 

Activity Action

  • 안드로이드에서 제공되는 기본 애플리케이션 중 다른 애플리케이션이 사용할 수 있도록 제공되는 액티비티들이 있다.
  • 이들은 모두 공개되어 있는 이름이 제공되며 이를 통해 실행할 수 있다. 

'TIL > Android' 카테고리의 다른 글

Menu  (0) 2024.04.09
권한  (0) 2024.04.05
Adapter View  (0) 2024.04.04
Widget  (0) 2024.03.28
view와 layout  (0) 2024.03.20