안드로이드 App Components

Min Young Kim·2022년 10월 4일
0
post-thumbnail

1. 액티비티(Activity)

  • 사용자가 애플리케이션과 상호작용하는 단일화면
  • 사용자와 상호작용을 담당하는 인터페이스
  • 생명주기(Life Cycle) 관련 메서드들을 재정의하여 원하는 기능들을 구현할 수 있음
  • 인텐트(Intent)를 통해 다른 애플리케이션의 액티비티를 호출할 수 있음
  • 2개 이상의 액티비티를 동시에 Display 할 수 없음
  • 1개 이상의 View 또는 ViewGroup 을 포함함
  • 애플리케이션에는 반드시 하나 이상의 액티비티가 있어야 함
  • 액티비티 내에 프래그먼트(Fragment)를 추가하여 화면을 분할시킬 수 있음

2. 서비스(Service)

  • 백그라운드(Background) 에서 어떠한 작업을 처리하기위해 사용함
  • 사용자의 인터페이스(UI, 화면)를 방해하지 않고 눈에 보이지 않는 곳에 작업을 처리
  • 메인 스레드에서 동작하며 서비스 내에서 별도의 스레드를 생성하여 작업을 처리해야함
  • 네트워크(Network) 와 연동이 가능함
  • 별도의 UI를 가지지 않으며 백그라운드에서 수행됨
  • 액티비티와 서비스는 UI스레드라고 불리는 동일한 애플리케이션 스레드로 실행됨
  • 애플리케이션이 종료되어도 이미 시작이 된 서비스(Service)는 백그라운드(Background) 에서 계속 동작함

3. 방송 수신자 (BroadCast Receiver)

  • 안드로이드 OS로부터 발생하는 각종 이벤트와 정보를 받아와 핸들링
  • 시스템 부팅시 앱 초기화, 네트워크 끊김, 배터리 부족 알림, 문자 수신등의 이벤트 처리
  • 메신저앱 또는 메세지가 오면 "메세지가 왔다" 라는 정보를 방송(BroadCast) 함
  • 거의 대부분 UI를 가지지 않음
  • 안드로이드 디바이스의 특수한 상황에 대응하기 위해서 사용
  • 특정한 상황을 제외하고는 브로드캐스트는 시스템에서 시작함

4. 콘텐츠 제공자 (Content Provider)

  • 앱 간의 데이터 공유를 목적으로 사용되는 컴포넌트(데이터 캡슐화)
  • 데이터를 관리하고 다른 애플리케이션의 데이터를 제공하는데 사용되는 컴포넌트

  • 데이터를 주는 쪽에서 ContentProvider 를 만들면 데이터를 요청하는 쪽에서 ContentProvider 의 함수를 이용하여 데이터를 이용하는 구조
  • 특정한 애플리케이션이 사용하고 있는 데이터베이스(DB)를 공유하기 위해 사용
  • 애플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스를 제공함
  • SQLite DB / Web / 파일 입출력 등을 통해서 데이터를 관리
  • OnCreate() 함수를 통해서 최초에 한번만 호출되며, 나머지 query() - 획득, insert() - 저장, update() - 수정, delete() - 삭제 함수는 외부 앱에서 필요할때 호출됨
  • 외부 애플리케이션이 현재 실행중인 애플리케이션 내에 있는 데이터베이스(DB)에 함부로 접근하지 못하게 할 수 있으면서, 공유하고 싶은 데이터만 공유할 수 있도록 도와줌
  • 음악 또는 사진 파일 등과 같이 용량이 큰 데이터들을 공유하는데 적합함
  • 데이터의 Read(읽기), Write(쓰기)에 대한 퍼미션이 있어야 애플리케이션에 접근이 가능함

  • ContentProvider를 AndroidManifest.xml 파일에 등록할때 authorities 라는 속성값을 꼭 입력해줘야하는데, 그 값은 스마트폰 전체에서 ContentProvider를 구분하기 위한 식별자가 됨
  • 스마트폰이 부팅되면 여러 앱의 모든 콘텐츠 프로바이더가 생성됨
  • 미리 생성해둔 ContentProvider 객체를 ContentResolver 를 이용하여 획득하면 됨
  • ContentProvier 는 흔히 "Uri 모델로 식별되어 이용되는 컴포넌트" 라고 표현함
  • Uri 객체를 URL로 만들어서 사용하며 host 부분을 식별자로 사용함
  • ContentProvider 는 관계형 DB 에서 흔히 볼 수 있는 테이블 형식으로 데이터를 표시해줌
  • ContentProvider는 데이터 저장층에 접근하기 위해서 다른 여러 API 들과 협력함

  • 사용자의 어플리케이션 정보를 다른 앱과 공유
  • 위젯에 데이터 전송하기
  • 검색어 맞춤 추천 서비스를 위한 최근 검색 추천 Provider
  • AbstractThreadedSyncAdapter 를 이용한 서버와 앱 데이터간의 데이터 동기화
  • CursorLoader 를 통해 데이터를 UI 에 로딩

ContentResolver (Provider 에 접근하기)

  • ContentProvider의 데이터에 접근하기 위해서 앱의 Context 내에서 ContentResolver를 사용하여 Provider 에 클라이언트 형식으로 접근
  • Provider 객체가 데이터 요청을 받으면, 요청받은 작업을 한뒤에 결과를 돌려주는 방식으로 작동
  • ContentResolver 는 데이터베이스에서 흔히 사용되는 CRUD(Create, Read, Update, Delete) 의 원칙을 준수함
  • 다음과 같은 형식으로 작동함

  • ContentResolver 의 쿼리문은 다음과 같은 매개변수를 가짐

  • Uri - 테이블 이름으로 테이블을 식별하는데 사용
  • projection - 테이블의 각 열을 구분하기 위해서 사용
  • selection - 특정 열을 선택하기 위해서 사용 (where 절)
  • selectionArgs - 특정 열 선택을 도와줌
  • sortOrder - 커서로 들어온 데이터들을 정렬

Content URi

  • content URI 는 provider 내에서 데이터를 구분하기 위해 쓰임
  • content URI 는 contentURI 임을 나타내는 scheme, provider 전체의 상징적인 이름인 authority, 테이블을 나타내는 path 로 이루어져 있음
  • 예를 들어 content://user_dictionary/words 라고 되어있다면
  • content:// → scheme , user_dictionary/ → authority , words → path 이다.

이어지는 글에서는 각 Component 에 대해 조금 더 자세히 보도록 하겠다.


Thumbnail From
https://medium.com/@Abderraouf/understand-android-basics-part-1-application-activity-and-lifecycle-b559bb1e40e

profile
길을 찾는 개발자

0개의 댓글