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