[Android Study] 면접 질문

변준영·2022년 11월 3일
0

안드로이드 스터디 1주차 과제

1. 안드로이드의 4대 컴포넌트

Activity

  • 사용자가 앱과 상호작용하는 단일 화면(UI를 담당하는 컴포넌트)
  • 안드로이드 어플리케이션은 반드시 하나 이상의 액티비티를 가지고 있어야 함
  • 두 개의 액티비티를 동시에 Display할 수 없음

Service

  • 화면이 없고 백그라운드에서 돌아가는 컴포넌트
  • Service 클래스를 상속받아서 사용
  • 네트워크를 통해서 데이터를 가져올 수 있다.

Content Provider

  • 데이터를 관리하고 다른 어플리케이션 데이터를 제공해 주는 컴포넌트
  • 주로 DB의 데이터를 전달할 때 많이 사용
  • 생명주기가 없다

Broadcast Receiver

  • 다양한 이벤트와 정보를 받아서 반응하는 컴포넌트
  • UI가 존재하지 않음
  • 디바이스에서 발생하는 일 중에서 어플리케이션이 알아야 하는 상황이 발생하면 알려줌

2. Activity의 생명주기

onCreate

  • Activity를 생성할 때 실행
  • 필수적으로 구현해야 함
  • 전체 수명 주기 동안 한 번만 발생해야 하는 기본 애플리케이션 시작 로직을 실행
  • Activity가 ‘시작됨’ 상태로 들어 감

onStart

  • ‘시작됨’ 상태일 때 실행
  • Activity가 사용자에게 표시됨
  • Activity가 ‘재개됨’ 상태에 들어 감

onResume

  • ‘재개됨’ 상태에 들어갈 때 실행
  • 어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 이 상태에 머무름
    -> 전화가 오거나, 다른 앱으로의 전환, 기기 화면이 꺼지는 이벤트 등
  • 방해되는 이벤트가 발생하면 Activity는 ‘일시중지됨’ 상태로 들어가고 onPause() 메소드 호출

onPause

  • 시스템이 사용자가 Activity를 떠나는 것을 나타내는 첫 번째 신호로 이 메소드를 호출
  • Activity가 ‘일시중지됨’ 상태일 때 계속 실행되어서는 안되지만 잠시 후 다시 시작할 작업을 일시중지하거나 조정함
    -> 멀티 윈도우 모드에서 포커스가 벗어난 경우
    -> 앱 실행을 방해하는 이벤트가 실행되는 경우

onStop

  • Activity가 사용자에게 더 이상 표시되지 않으면 ‘중단됨’ 상태에 들어가고 이 메소드를 호출
  • 이 메소드에서는 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스르 해제하거나 조정해야 함
  • CPU를 비교적 많이 소모하는 종료 작업을 실행해야 함
    -> DB에 저장할 적절한 시기를 찾지 못했다면 onStop()상태일 때 저장
  • Activity가 다시 시작되면 onRestart()를 호출하고, Activity가 실행을 종료하면 onDestroy()를 호출

onDestroy

  • Activity가 완전히 소멸되기 전에 호출
    -> Finish()가 호출되어 활동이 종류되는 경우
    -> 구성 변경(기기 회전이나 멀티 윈도우모드)으로 인해 시스템이 일시적으로 Activity를 소멸시키는 경우
  • Activity가 다시 생성되지 않을경우 onCleared() 메소드를 호출하여 모든 데이터를 정리해야 함

3. Intent란?

  • 메시징 객체
  • 다른 앱 구성요소로 부터 작업을 요청하는 데 사용

명시적 Intent

  • 일반적으로 앱 안에서 구성 요소를 시작할 때 사용
    -> 사용자 작업에 응답하여 새로운 액티비티를 시작
    -> 백그라운드에서 파일을 다운로드하기 위해 서비스를 시작

암시적 Intent

  • 특정 구성 요소의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여 다른 앱의 구성 요소가 이를 처리할 수 있도록 해줌
    -> 사용자에게 지도에 있는 한 위치를 표시하고자 하는 경우, 암시적 인텐트를 사용하여 해당 기능을 갖춘 다른 앱이 지정된 위치를 지도에 표시하도록 요청

4. REST API란?

  • Representational State Transfer
  • 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 것
    -> URI를 통해 어떤 자원인지 명시하고, HTTP Method (GET, POST, PUT, PATCH, DELETE) 에 따라 해당 자원을 처리하여 자원의 상태(Representation)를 응답하도록 설계된 아키텍쳐
  • 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용
    -> HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능
  • 세션 정보나 쿠키를 별도로 저장하지 않고 관리하지 않기 때문에 API서버는 들어오는 요청만 단순히 수행
    -> 서버에서 불필요한 정보를 관리하지 않게 되고 구현이 단순
  • 캐시 처리 기능(Cacheable)을 활용하여 대량의 요청을 효율적으로 처리
  • 클라이언트-서버 구조

5. ANR이란?

  • Application Not Responding (애플리케이션이 응답하지 않는다)
  • Main Thread(UI Thread)가 일정 시간 어떤 Task에 잡혀 있으면 발생

발생하는 경우
- Input 이벤트(키를 누르거나 화면을 터치하는 등)에 5초안에 반응을 하지 않을 때)
- BroadcatReceiver 가 10초내로 실행을 끝내지 않을 때 (UI가 없는 브로드캐스트 리시버, 서비스도 실행 주체가 메인스레드이므로 긴 시간을 소모하는 작업인 경우 ANR을 발생시킨다.)

ANR예방 설계
- 시간 소모가 많은 작업은 스레드를 통해 처리
- 프로그레스바 등을 이용해 작업의 진행 과정 안내해 기다리도록 유도

참고
[이전 글]
https://velog.io/@jybyun33/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Activity%EC%99%80-Fragment
https://velog.io/@jybyun33/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Intent
[블로그]
1. 안드로이드 4대 컴포넌트 : https://bbul-jit.tistory.com/23
2. REST API : https://beenii.tistory.com/134
3. ANR : https://itmining.tistory.com/3

0개의 댓글