본문 바로가기

안드로이드

안드로이드 개념 정리

1. Android 4대 컴포넌트란?

1) Activity

하나의 화면을 액티비티 라고 부릅니다.

Activity는 앱이 UI를 그리는 창을 제공합니다. 이 창은 일반적으로 화면을 채우지만 화면보다 작고 다른 창 위에 떠 있을 수 있습니다. 일반적으로 한 Activity는 앱에서 하나의 화면을 구현합니다. 

 

 

2) Service

화면에 존재하지 않고 백그라운드에서 실행되는 컴포넌트,

Service는 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이며 사용자 인터페이스를 제공하지 않습니다

 

서비스의 3가지 유형

 

  • 포그라운드

포그라운드 서비스는 사용자가 앱과 상호작용하지 않을 때도 계속 실행됩니다.

 

  • 백그라운드

백그라운드 서비스는 사용자에게 직접 보이지 않는 작업을 수행합니다. 

 

  • 바인드

앱 내에서 서비스를 사용하여 간단한 클라이언트 - 서버 환경을 구성하는 것을 말함(특정 컴포넌트와 서비스간 상호작용)

 

 

3) Broadcast Receiver

단말기에서 발생하는 다양한 이벤트, 정보를 받고 반응하는 컴포넌트,

앱은 두 가지 방식으로, 즉 manifest에 선언된 수신자 및 컨텍스트에 등록된 수신자를 통해 브로드캐스트를 수신할 수 있습니다.

 

 

4) Content Provider

데이터를 저장하고, 가져오고, 모든 App에서 접근할 수 있도록 하는 컴포넌트,

콘텐츠 제공자는 애플리케이션이 자체적으로 저장된 데이터, 다른 앱이 저장한 데이터에 대한 액세스 권한을 관리하도록 돕고 다른 앱과 데이터를 공유할 방법을 제공합니다

 

2. Activity, Fragment의 차이점

 Activity의 특성 : 사용자가 원하는 대로 Activity를 변경할 수 있고, Activity가 변하면 View도 따라서 변하게 된다.

1. Activity는 독립적으로 활용할 수 있다.

2. Fragment는 Activity에 종속되어 있다.

3. Activity는 전체 화면을 차지하고, Fragment는 전체 화면이 아닌 일부 화면으로

구성할 수도 있기 때문에 상대적으로 유연한 UI디자인이 가능하다.

4. Activity는 자동적으로 Stack에 넣어지고, Fragment는 Transaction을 통해서 요청해야 한다.

 

퍼포먼스 관점

액티비티는 무겁다. 물론 액티비티를 초기화하는데 몇초씩 걸리는 것은 아니지만 프레그먼트와 비교할 때 상대적으로 무겁다라고 할 수 있다. 그렇다고 액티비티가 필요없는 것은 아니다. 프레그먼트는 단독으로 존재할 수 없으며, 반드시 액티비티 내에서 호스팅되어야 한다. 액티비티내에서 프레그먼트는 상대적으로 가볍게 추가/제거가 가능하다. 그렇기 때문에 액티비티 스택에 액티비티를 쌓아두는 것보다 프레그먼트 백스택에서 프레그먼트를 관리하는 것이 메모리 관리면에서도 효율적이며, 화면전환도 액티비티보다 더 순조롭게 할 수 있다.

 

데이터 공유

액티비티간 데이터를 공유하는 가장 일반적인 방법은 인텐트(Intent)를 사용하는 방법 밖에 없다.
(싱글톤 사용 및 애플리케이션 내 객체 공유 등의 특수한 경우는 고려하지 않는다.)
액티비티는 다른 프로세스에서 실행하는 것을 염두하고 설계 되었기 때문에 메모리 영역을 공유하지 않는다. 그렇기 때문에 리눅스 커널 레벨에서 프로세스 간 통신(IPC)을 하게 되는데, 이 부분에서 많은 제약사항이 생기며 메모리를 직접 공유하는 것보다 퍼포먼스가 많이 떨어지게 된다. 프레그먼트를 사용하는 경우 프레그먼트 간 데이터 공유는 액티비티내에서 자유롭게 이루어진다. 물론 코드베이스에서 데이터를 전달하는 과정이 복잡해 보일 수 있지만, ViewModel 또는 DI 프레임워크 사용으로 이 부분을 좀 더 매끄럽게 만들 수도 있다. 

 

생명주기

액티비티와 프레그먼트는 각각 고유의 생명주기를 갖는다. 둘의 생명주기는 비슷하지만 프레그먼트의 생명주기를 이해하기 위해서는 액티비티 생명주기 또한 숙지하고 고려해야한다. 이 부분에서 많은 개발자들이 혼란을 겪게 된다. 액티비티가 언제 파괴/재생성 될지도 모르는데 그 안에서 프레그먼트의 파괴/재생성까지 신경쓰려니 복잡해 질 수 밖에 없다.

 

3. Jetpack에 아시나요?

Jetpack은 개발자가 관심 있는 코드에 집중할 수 있도록 권장사항 준수, 상용구 코드 축소, 모든 Android 버전 및 기기에서 일관되게 작동하는 코드 작성을 돕는 라이브러리 모음입니다

 

4. What is the Intent ?

인텐트는 messaging object(메세지 객체) 이다. 이 객체를 통해 다른 컴포넌트 간에 정보를 주고 받을 수 있다

Intent는 메시징 객체로, 다른 앱 구성 요소로부터 작업을 요청하는 데 사용할 수 있습니다.

인텐트 유형

인텐트에는 두 가지 유형이 있습니다.

  • 명시적 인텐트는 인텐트를 충족하는 애플리케이션이 무엇인지 지정합니다. 이를 위해 대상 앱의 패키지 이름 또는 완전히 자격을 갖춘 구성 요소 클래스 이름을 제공합니다. 명시적 인텐트는 일반적으로 앱 안에서 구성 요소를 시작할 때 씁니다. 시작하고자 하는 액티비티 또는 서비스의 클래스 이름을 알고 있기 때문입니다. 예를 들어, 사용자 작업에 응답하여 새로운 액티비티를 시작하거나 백그라운드에서 파일을 다운로드하기 위해 서비스를 시작하는 것 등이 여기에 해당됩니다.
  • 암시적 인텐트는 특정 구성 요소의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여 다른 앱의 구성 요소가 이를 처리할 수 있도록 해줍니다. 예를 들어 사용자에게 지도에 있는 한 위치를 표시하고자 하는 경우, 암시적 인텐트를 사용하여 해당 기능을 갖춘 다른 앱이 지정된 위치를 지도에 표시하도록 요청할 수 있습니다.

 

5. ANR?

Android 앱의 UI 스레드가 너무 오랫동안 차단되면 'ANR(애플리케이션 응답없음)' 오류가 나타나게 된다. 앱이 포그라운드에 있으면 아래와 같이 시스템에서 사용자에게 다이얼로그를 표시한다.

Android 앱의 UI 스레드가 너무 오랫동안 차단되면 'ANR(애플리케이션 응답 없음)' 오류가 트리거됩니다. 앱이 포그라운드에 있으면 그림에서와 같이 시스템에서 사용자에게 대화상자를 표시합니다. 사용자가 ANR 대화상자에서 앱을 강제 종료할 수 있습니다.

 

다음 조건 중 하나가 발생하면 앱과 관련한 ANR이 발생됩니다.

  1. 활동이 포그라운드에 있는 동안 앱이 입력 이벤트 또는 BroadcastReceiver(예: 키 누름 또는 화면 터치 이벤트)에 5초 이내에 응답하지 않았을때
  2. 포그라운드에 활동이 없을 때 BroadcastReceiver가 상당한 시간 내에 실행을 완료하지 못했을 때

-------------------------------------------------------------------------------------------------------------------------

답변은 개인블로그 공식문서를 활용하였습니다.

 

질문, 답변 참조

https://www.notion.so/imwj/Android-Interview-3ce7ddf12ddb413a9d2213173654d52c

 

do it 안드로이드 앱프로그래밍 -개정8판

https://charlezz.medium.com/activity-vs-fragment-%EB%AC%B4%EC%97%87%EC%9D%84-%EC%84%A0%ED%83%9D%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C-56ce7fa2bfc4

https://developer.android.com/jetpack?hl=ko 

https://angangmoddi.tistory.com/244

https://developer.android.com/topic/performance/vitals/anr?hl=ko 

https://haenny.tistory.com/13

https://developer.android.com/guide/components/activities/intro-activities?hl=ko

https://developer.android.com/guide/components/services?https://developer.android.com/guide/components/broadcasts?hl=ko  

 

서비스 개요  |  Android 개발자  |  Android Developers

서비스 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Service는 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이며 사

developer.android.com

 

'안드로이드' 카테고리의 다른 글

안드로이드 webview bridge 실습  (0) 2022.12.20
안드로이드 학습 계획  (0) 2022.11.21
안드로이드 WebView 구현 및 디버깅  (0) 2022.11.13
싱글톤, 옵저버 패턴 개념 정리  (0) 2022.11.13
모바일 앱 종류  (0) 2022.11.04