Android 기초 돌아보기

JongHyunSeo·2025년 4월 12일

Android 기초

목록 보기
7/7
post-thumbnail

앱 구성요소 4가지

Activity, Service, BoardcastReceiver, ContentProvider

Activity

  • 앱과 사용자간 상호작용을 위한 진입점
  • 모든앱에 1개 이상 반드시 존재
  • 사용자와 상호작용을 위한 UI가 존재
  • Lifecycle이 있음

Activity의 Lifecycle

onCreate()

  • 필수적으로 구현
  • Activity의 생명주기 중 한번만 발생해야하는 로직을 실행
    • 멤버 변수 정의
    • UI 구성 (setContentView, xml 레이아웃 파일 정의)
  • saveInstanceState 매개 변수 수신 -> Activity 이전 저장 상태가 포함된 Bundle 객체

onStart()

  • Activity가 사용자에게 표시
  • 앱은 Activity를 포그라운드로 보내 상호작용할 수 있도록 준비

onResume()

  • Activity가 포그라운드에 표시되어, 사용자와 상호 작용 할 수 있는 상태
  • 앱에서 포커스가 떠날 때까지 onResume 상태에 머무름

onPause()

  • 사용자가 Activity를 떠나는 첫 번째 신호
  • 매우 짧음
  • Activity가 포그라운드에 있지 않지만 잠시 후 다시 시작할 작업을 일시 중지 하거나 조정
    • 반투명 Activity가 띄워져 포커스는 없지만 화면에는 보이는 상태
  • 이 상태를 통해, 실행중이지 않을 때 필요하지 않은 리소스를 해지할 수 있음
  • 이 상태에서, 데이터를 저장하거나 네트워크 호출, DB의 IO 작업을 하면 안됨
    • 매우 짧은 시간이라 메서드가 끝나기전에 Activity가 종료될 수 있음

onStop()

  • Activity가 더 이상 사용자에게 표시 되지 않는 상태
    • 사용중, 홈 버튼을 통해 홈으로 이동해 백스택에 올라간 경우
  • CPU를 비교적 많이 소모하는 작업을 종료해야함
    • DB 저장
  • Activity가 중단되면 Android OS에서 리소스 관리를 위해 해당 Activity가 포함된 프로세스를 소멸시킬 수 있음

onDestroy()

  • Activity가 완전히 종료되기 전에 실행
    • finish() 호출로 Activity가 종료될 때
    • configurationChage(기기 회전, 멀티 윈도우)로 인해 시스템이 Activity를 일시적으로 소멸 시킬 때

View가 그려지는 과정

부모부터 자식뷰 순서로 그려지게됨

measure

  • 뷰의 크기를 계산
  • 모든 뷰는 각각 자신의 width, height를 계산
  • measure 과정에서, 부모 - 자식 뷰간의 크기 정보 전달을 위해 2가지 클래스 사용
    • ViewGroup.LayoutParams : 자식 뷰가 부모 뷰에게 자신이 어떻게 측정되고 위치를 정할지 요청할 때 사용
      • DP, PX : 자식뷰가 원하는 사이즈
      • MATCH_PARENT : 부모 뷰 사이즈와 똑같이 자식 뷰 사이즈 지정
      • WRAP_CONTENT : 부모 뷰 안에서, content를 표현할 수 있는 fit한 사이즈 지정
    • ViewGroup.MeasureSpecs : 부모 뷰가 자식 뷰에게 요구사항을 전달할 때 사용
      • UNSPECIFIED : 부모 뷰는 자식 뷰가 원하는 사이즈로 결정
      • EXACTLY : 부모 뷰는 자식 뷰의 사이즈를 정확히 지정할 때
      • AT_MOST : 부모 뷰가 자식 뷰의 최대 사이즈를 지정할 때

layout

  • 뷰의 크기와 위치 할당
  • 부모기준의 상대적 위치 (left, top, right, bottom)을 계산

draw

  • View를 그리는 단계
    • Canvas : 뷰의 모양을 그리는 객체
    • Paint : 뷰의 색상을 칠하는 객체
  • measure에서 측정한 크기로 layout에서 계산한 위치에 뷰를 그림
  • 이 콜백은 언제든 다시 호출될 수 있음
    • scroll, swipe등 동작하면 View는 onDraw를 다시 호출
    • 객체 할당같이 리소스가 많이 드는 로직은 추가하지 말것

viewUpdate

런타임에 뷰를 다시 그리게 하는 함수

  • invalidate : view에 변화가 생겨서 다시 그려야 할 경우 호출
    • 색상 변화
  • requestLayout : view를 처음부터 그려야 할 때
    • 크기가 변화해서 measure부터 다시 해야할 때

Service

  • 백그라운드에서 오래 실행되는 작업 수행을 위한 컴포넌트
  • 사용자가 다른 앱으로 전환하더라도 백그라운드에서 계속 실행
  • UI가 없음

Foreground Service

  • 사용자에게 잘 보이는 작업
  • 반드시 알림을 표시해야하며, 사용자가 앱과 상호작용하지 않을 때도 계속 실행됨
    • 음악 재생

Background Service

  • 사용자에게 직접 보이지 않는 작업
    • 저장소 압축, 게임 업데이트, 파일 압축 등
  • 앱이 API 26 이상을 대상으로 할 경우
    • 즉시 실행 : Work Manager
    • 지연 작업 : Alarm Manager

Bind Service

  • 바인딩된 서비스는 클라이언트-서버 인터페이스를 제공해 서비스와 상호 작용함
  • 여러개가 한번에 바인딩 될 수 있고, 바인딩 된 컴포넌트가 모두 종료되면 서비스도 종료됨

BroadcastReceiver

  • Android OS에서 발생하는 이벤트와 정보를 앱에서 수신할 수 있도록 하는 컴포넌트
    • 화면 꺼짐
    • 배터리 부족
    • 사진 캡처
  • UI 없음

ContentProvider

  • 파일 시스템, SQLite 데이터베이스, 웹상이나 앱이 엑세스할 수 있는 다른 모든 영구 저장위치에 저장 가능한 앱 데이터의 공유형 집합 관리
  • 다른 앱은 ContentProvider를 통해 해당 데이터를 질의하거나 수정할 수 있음
    • 연락처 정보
    • 갤러리 이미지 / 비디오

Manifest

앱의 필수적인 정보를 담고 있는 파일

  • 패키지 이름
  • 구성요소
  • 권한
  • 필요한 기능

Intent

  • 컴포넌트간 통신을 할 수 있게 하는 역할
  • 앱에 포함된 컴포넌트 이외에, 다른 앱의 컴포넌트와도 통신할 수 있음
    • 명시적 인텐트 : 특정 컴포넌트, 액티비티를 명확히 특정해 실행
      • A Activity에서 B Activity 실행 호출
    • 암시적 인텐트 : 동작을 특정하긴 했지만, 실행될 대상이 달라질 수 있는 경우
      • 특정 URL을 실행이라는 액션을 요청한 경우, 웹 브라우저 기능을 가진 다수의 앱이 호출될 수 있음
profile
공부는 꾸준하게

0개의 댓글