질문 정리

안드로이드 4대 컴포넌트 정리

five2week 2023. 9. 27. 11:08

면접 준비를 하며, 안드로이드 4대 컴포넌트에 대해서 복습했습니다.

 

  1. 액티비티 (Activity):
    • 액티비티는 사용자 인터페이스(UI)와 상호작용하는 주요 화면 요소입니다.
    • 사용자와 앱 사이의 상호작용을 처리하며, 버튼 클릭, 터치 이벤트, 메뉴 선택 등과 같은 사용자 입력을 처리합니다.
    • 하나의 앱은 여러 개의 액티비티를 가질 수 있고, 각 액티비티는 화면 전환 및 탐색을 담당합니다.
안드로이드 앱이 반드시 하나 이상의 액티비티를 가져야 하는 것은 아닙니다. 액티비티는 안드로이드 앱에서 사용자 인터페이스(UI)를 표시하고 사용자와 상호작용하는 주요 컴포넌트 중 하나이지만, 모든 앱이 액티비티를 가져야 하는 것은 아닙니다.
  1. 서비스 (Service):
    • 서비스는 백그라운드에서 실행되는 컴포넌트로, 사용자 인터페이스 없이 백그라운드 작업을 수행합니다.
    • 예를 들어, 음악 재생, 데이터 동기화, 위치 추적 등과 같은 작업을 처리할 때 사용됩니다.
    • 서비스는 기본적으로 메인 스레드에서 실행되며, 오래 걸리는 작업을 다루기 위한 별도의 스레드를 생성하여 처리해야 합니다.
서비스가 메인 스레드에서 실행되고, 오래 걸리는 작업을 메인 스레드에서 처리한다면 다음과 같은 문제가 발생할 수 있습니다

1.ANR (Application Not Responding) 발생
오래 걸리는 작업을 메인 스레드에서 수행하면 앱의 UI가 블록되어 사용자 입력에 응답하지 못하고 ANR이 발생할 수 있습니다. 이로 인해 앱이 응답하지 않게 되어 사용자 경험이 크게 저하됩니다.
2.앱의 동작 불안정성
오래 걸리는 작업은 메인 스레드에서 실행되면서 예상치 못한 동작 및 오류를 일으킬 수 있습니다.

따라서 안드로이드에서는 오래 걸리는 작업은 메인 스레드에서 처리하지 않고, 별도의 스레드 또는 서비스에서 처리해야 합니다.일반적으로 백그라운드 스레드 또는 스레드 풀을 사용하여 오래 걸리는 작업을 분리하고, 메인 스레드는 사용자 인터페이스와 관련된 업무에 집중해야 합니다.
Application Not Responding.
원인 : 메인스레드(UI 스레드)가 일정 시간 어떤 Task에 잡혀 있으면 발생한다. input 이벤트에 5초안에 반응하지 않을 때 BroadcastReceiver가 10초내로 실행을 하지 않을 때 (UI가 없는 브로드캐스트 리시버, 서비스도 실행 주체가 메인스레드 이므로 긴 시간을 소모하는 작업인 경우 ANR발생)
  1. 브로드캐스트 리시버 (Broadcast Receiver):
    • 브로드캐스트 리시버는 안드로이드 시스템 또는 다른 앱에서 발생한 브로드캐스트 메시지(이벤트)를 감지하고 이에 대응하는 컴포넌트입니다. 주로 다음과 같은 상황에서 사용됩니다:
    • 알림 및 이벤트 수신: 배터리 부족, 네트워크 연결 변경, 화면 켜짐/끄기 등의 시스템 이벤트나 사용자 정의 이벤트를 수신하여 특정 작업을 수행할 때 사용됩니다.
    • 비동기 작업: 일부 작업은 비동기적으로 실행되어야 하며, 브로드캐스트 리시버를 사용하여 특정 이벤트가 발생할 때 작업을 트리거할 수 있습니다.
    • 다른 앱과 통신: 브로드캐스트를 통해 다른 앱과 통신하고 데이터를 교환할 수 있습니다.
브로드캐스트 리시버는 BroadcastReceiver 클래스를 상속하며, onReceive 메서드를 구현하여 브로드캐스트 메시지를 처리합니다. 이 메서드는 UI 스레드에서 실행되므로 오랜 시간이 걸리는 작업을 수행해서는 안 됩니다. 대신, 이 메서드 내에서 작업을 수행할 때는 백그라운드 스레드 또는 IntentService와 같은 백그라운드 서비스를 활용하여 처리해야 합니다.
  1. 콘텐트 프로바이더 (Content Provider):
    • 콘텐트 프로바이더는 데이터를 관리하고 다른 앱과 데이터를 공유하는 데 사용되는 안드로이드 컴포넌트입니다. 주로 다음과 같은 상황에서 사용됩니다:
    • 데이터 공유: 앱 간에 데이터를 공유하고 다른 앱에서 데이터를 읽고 쓸 수 있도록 하는데 사용됩니다.
    • 데이터 관리: 데이터베이스, 파일 또는 기타 데이터 저장소에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행하고 데이터의 일관성과 보안을 관리합니다.
    • 검색 기능: 데이터에 대한 검색 및 쿼리 기능을 제공하여 데이터를 검색하고 필터링할 수 있습니다.
    • 콘텐트 프로바이더는 데이터베이스나 파일 시스템과 같은 데이터 저장소에 접근하고 다른 앱이 이 데이터에 접근할 수 있도록 하는 인터페이스 역할을 합니다. 또한 콘텐트 프로바이더를 통해 데이터의 URI(Uniform Resource Identifier)를 통해 데이터를 식별하고 접근할 수 있습니다.
    • 안드로이드에서 많이 사용하는 콘텐트 프로바이더로는 주소록, 미디어 저장소, 설정 정보, 캘린더 등이 있으며, 다른 앱이 이러한 데이터에 접근하고 활용할 수 있도록 해줍니다.
    • Content Provider : 어플리케이션 내에서 사용할 수 있는 데이터를 ‘공유’하기 위한 컴포넌트 Ex) 연락처,이미지 등 (카카오톡)
    • Content Resolver : 앱이 ContentProvider를 접근할 때에는, Content Resolver를 통해 접근하게 됨.
콘텐트 프로바이더(Content Provider)와 리졸버(Resolver)는 안드로이드에서 데이터 공유와 검색을 위한 핵심 구성 요소로 함께 동작합니다. 이 두 가지 구성 요소 간의 관계는 다음과 같습니다
리졸버는 데이터를 검색하고 데이터에 대한 작업을 수행하기 위한 클라이언트 앱의 컴포넌트입니다. 콘텐트 프로바이더와 리졸버 간의 연결은 다음과 같이 이루어집니다
1. URI를 통한 데이터 식별
콘텐트 프로바이더는 각 데이터에 고유한 URI를 제공합니다. 리졸버는 이 URI를 사용하여 원하는 데이터를 식별하고 접근합니다.
2. 콘텐트 프로바이더 등록
리졸버는 데이터에 접근하기 위해 콘텐트 프로바이더를 등록하고, 데이터베이스나 파일 시스템 등에서 데이터를 가져올 수 있는 연결을 설정합니다.
3. 쿼리와 CRUD 작업
리졸버는 데이터베이스 쿼리를 실행하거나 CRUD 작업을 수행하여 데이터를 읽거나 수정합니다. 이때 콘텐트 프로바이더가 제공하는 인터페이스를 활용합니다.
4. 데이터 공유
콘텐트 프로바이더는 리졸버를 통해 여러 앱에서 데이터를 공유하고 접근할 수 있도록 해줍니다. 콘텐트 프로바이더와 리졸버의 조합은 안드로이드에서 데이터 공유와 데이터 검색을 효과적으로 구현하는 데 사용됩니다. 다양한 앱 간에 데이터를 안전하게 공유하고 필요한 데이터를 검색하기 위해 사용됩니다.

안드로이드 앱은 이 4대 컴포넌트를 조합하여 다양한 기능을 구현하며, 이를 통해 사용자에게 풍부한 앱 경험을 제공합니다. 각 컴포넌트는 생명주기와 관련된 특징을 가지고 있으며, 적절한 시점에서 적절한 컴포넌트를 사용하여 앱을 개발하는 것이 중요합니다.

 

'질문 정리' 카테고리의 다른 글

효율적인 로깅을 위한 LogUtils  (1) 2024.01.23
HTTP Content Type과 Retrofit  (0) 2024.01.12
네트워크 처리량과 병목현상  (0) 2023.08.28
MVC, MVP, MVVM 패턴에 대한 정리  (1) 2023.07.31
왜 코틀린인가요?  (0) 2023.06.27