
Android는 다양한 기기와 폼 팩터에 사용할 수 있도록 제작된 Linux 기반의 오픈 소스 소프트웨어 스택아래 그림과 같은 구조로 구성됨Android 플랫폼 기초는 Linux 커널, 예시로 Android 런타임(ART)는 스레딩 및 하위 수준의 메모리 관리와 같은
Android 앱의 필수 빌딩 블록 각 구성요소(Component)는 시스템이나 사용자가 앱에 진입할 수 있는 진입점(Entry Point) 일부 구성요소는 다른 구성요소에 의존하기도 함 Activity 사용자 인터페이스가 있는 단일 화면을 나타내는 구성요소 이메일
안드로이드 시스템이 앱의 구성요소를 실행하기 위해 구성요소가 존재 여부를 알 수 있는 파일앱 프로젝트 루트 디렉토리에 AndroidManifest.xml파일로 존재구성요소 선언외에도 사용자 권한, 최소 API 레벨, 필요 하드웨어 또는 소프트웨어 기능(예: 카메라, 블

사용자가 앱을 탐색하고, 앱을 나가고, 다시 돌아올 때, 앱의 Activity 인스턴스는 수명주기(lifecycle)내에서 여러 상태를 오가게 됨Activity 클래스는 상태가 변경되거나 시스템이 액티비티를 생성, 중지, 재개, 또는 액티비티가 속한 프로세스를 파괴할
액티비티 상태와 메모리에서의 방출 시스템은 RAM 확보를 위해 프로세스를 종료할 수 있음 프로세스의 종료 가능성은 프로세스가 어떤 상태에 있는지에 따라 다름 프로세스의 상태는 프로세스에서 실행하고 있는 액티비티가 어떤 상태에 있는지에 따라 다름 프로세스 상태와 액
태스크(task)는 사용자가 앱에서 무언가 하려고 할 때 상호작용하는 액티비티의 모음 액티비티들은 백 스택(back stack)이라는 스택에 액티비티가 실행된 순서대로 정리됨 예시로, 이메일 앱이 새 메시지의 리스트를 보여주는 액티비티를 가지고 있을 때, 사용자가
대부분의 경우 모든 안드로이드 앱은 자신의 리눅스 프로세스에서 실행됨앱의 프로세스 수명이 앱에 의해 결정되지 않음액티비티, 서비스, 브로드캐스트 리시버와 같은 앱 컴포넌트가 앱 프로세스 수명에 어떻게 다르게 영향을 주는지 이해해야 함, 그렇지 않으면 중요한 일을 하는
IPC/바인더 트랜잭션과 같이 프로세스 경계를 넘는데 사용됨인텐트를 통한 액티비티 사이, 설정 변경시 임시 상태를 저장하는데 쓰임노트: Parcel은 범용적인 직렬화 방식이 아니므로 디스크에 저장하거나 네트워크에 저장하지 마십시오.새 액티비티를 시작하기 위해 Inten

오래 지속되는 작업을 백그라운드에서 처리하기 위해 사용되는 앱 컴포넌트 사용자 인터페이스를 제공하지 않음 >주의: 서비스는 프로세스의 메인 스레드에서 실행됨, 서비스는 특별히 명시하지 않는 한 스레드를 생성하지 않고, 별도의 프로세스에서 실행되지 않음, 따라서 AN

연결된 서비스는 클라이언트-서버 인터페이스의 서버에 해당함 액티비티와 같은 컴포넌트가 서비스에 연결, 요청 전송, 응답 수신, IPC 수행을 가능하게 함 일반적으로 백그라운드에서 무기한으로 실행되지 않으며, 다른 앱 컴포넌트에게 서비스를 제공하는 동안만 작동함 기
프로세스 간 통신(IPC)을 사용하여 통신하기 위해 클라이언트와 서비스 모두 동의하는 프로그래밍 인터페이스를 정의하는 것 안드로이드에서 일반적으로는 프로세스에서 다른 프로세스의 메모리에 접근할 수 없음, 통신하려면 객체를 운영체제가 이해할 수 있게 기본형으로 분해하고
안드로이드 앱은 publish-subscribe 패턴과 비슷하게 안드로이드 시스템이나 다른 앱에서 브로드캐스트 메시지를 전송하고 수신함, 예시로 안드로이드 시스템은 시스템 부팅 또는 기기 충전과 같은 다양한 시스템 이벤트가 발생할 때 브로드캐스트를 전송함, 앱도 또한
안드로이드 8(API 레벨 26)이상을 타겟팅하는 앱은 브로드캐스트가 특별히 이 앱에만 전송되는 경우 외에는 암시적 브로드캐스트를 받는 브로드캐스트 리시버를 매니페스트에 등록할 수 없음, 하지만 몇몇의 브로드캐스트는 이 제한에서 예외됨, 타겟팅하는 API 레벨과 상관

컨텐츠 제공자는 앱이 자체적으로 저장된 데이터나 다른 앱에 저장된 데이터에 액세스하는 것을 돕고 다른 앱에 데이터를 공유하는 방법을 제공함데이터를 캡슐화 하고 데이터 보안을 정의할 방법을 제공함한 프로세스의 데이터를 코드가 실행중인 다른 프로세스와 연결하는 표준 인터페
컨텐츠 제공자는 데이터의 중앙 저장소로의 접근을 관리함, 안드로이드 앱의 일부로 데이터와 작업하기 위한 고유 UI를 제공하는 제공자가 있지만, 컨텐츠 제공자는 제공자 클라이언트 객체를 이용해 제공자에 접근하는 것처럼 주로 다른 앱에 의해 사용됨, 제공자와 제공자 클라이
컨텐츠 제공자는 데이터의 중앙 저장소에 대한 접근을 관리함, 제공자는 하나 이상의 클래스를 구현해야하며 이를 매니페스트 파일의 요소로 추가해야 함, 이 클래스 중 하나의 클래스는 ContentProvider 의 자식 클래스를 구현해야하며 이는 다른 앱과 제공자 사이의
Intent는 다른 앱 컴포넌트에 작업을 요청할 때 쓸 수 있는 메시지 객체임, 인텐트는 다양한 방식으로 컴포넌트간의 통신을 가능하게 하지만 기본적인 사용 방식은 다음과 같이 세 가지가 있음 액티비티 시작: Activity 는 앱의 한 화면을 대표함, startA
레이아웃은 액티비티와 같이 앱의 사용자 인터페이스 구조를 정의함 레이아웃의 요소들은 View 와 ViewGroup 객체의 계층 구조를 사용해 구성됨 View는 일반적으로 사용자가 보고 상호작용하는 것을 그림 ViewGroup은 그림 1에서 보이는 것과 같이 다른

반응형/적응형 레이아웃은 화면 크기에 상관없이 최적화된 사용자 경험을 제공함, 반응형/적응형 레이아웃은 뷰 기반 앱이 모든 화면 크기, 방향, 설정(멀티 윈도우 모드와 같은 크기 변경 가능 설정 포함)을 지원할 수 있게 함 반응형 디자인 다양한 기기의 폼 팩터를 지
창 크기 클래스는 반응형/적응형 레이아웃을 디자인, 개말, 테스트하는데 도움을 주도록 권장되는 뷰포트 중단점(viewport breakpoint)의 집합임, 이 중단점은 레이아웃의 단순성과 특정 경우에 앱을 최적화하는 유연성의 균형을 맞춤 창 크기 클래스는 앱을 위해

표준 레이아웃은 다양한 폼팩터에서 최적화된 사용자 경험을 제공하는 검증된 다양한 레이아웃임 표준 레이아웃은 작은 화면의 스마트폰뿐만 아니라 태블릿, 폴더블, ChromeOS 기기까지 지원함, 머티리얼 디자인 가이드에서 파생된 레이아웃이며 이는 심미적이면서도 기능적임
ConstraintLayout은 크고 복잡한 레이아웃을 중첩된 뷰 그룹이 없는 플랫한 뷰 계층구조로 만들 수 있게 함, 모든 뷰가 부모 레이아웃과 형제 뷰와의 관계로 레이아웃을 정하는 점은 RelativeLayout 과 비슷하지만 더 유연하고, 안드로이드 스튜디오의 레

RecyclerView를 사용하면 대량의 데이터 셋을 효율적으로 표시할 수 있음, 데이터를 제공하고 아이템이 어떻게 표시되는지 정의하면 RecyclerView 라이브러리가 요소가 필요할 때 동적으로 생성해줌 이름에서 알 수 있듯, RecyclerView 는 개별 요소
특정 요구를 맞추기 위해 RecyclerView 객체를 사용자 설정할 수 있음, RecyclerView로 동적 목록 만들기에서 설명된 표준 클래스는 대부분의 개발자가 필요하는 모든 기능을 제공함, 대부분의 경우 각 뷰홀더를 위한 뷰와 적합한 데이터로 해당 뷰를 수정하는
안드로이드 프레임워크는 Activity 가 포커스를 가질 때 레이아웃을 그리도록 요청함, 안드로이드 프레임워크는 Activity 가 레이아웃 계층 구조의 루트 노드를 제공해야 그리는 과정을 처리할 수 있음 안드로이드 프레임워크는 레이아웃의 루트 노드를 그리고 레이아웃

다양한 화면 및 앱 간의 네비게이션은 사용자 경험에 핵심 부분임, 다음 원칙들은 앱을 사용하는 동안 일관적이고 직관적인 사용자 경험을 주기 위한 기준선을 설정함, 네비게이션 컴포넌트는 기본적으로 이런 원칙들을 구현하도록 설계되어 있으므로 사용자가 다른 앱으로 이동하더라
내비게이션은 사용자가 앱 내의 컨텐츠 조각으로 들어가거나 나오거나 또는 사이를 이동하도록 하는 상호작용을 나타냄안드로이드 Jetpack의 내비게이션 컴포넌트는 Navigation 라이브러리, Safe Args Gradle 플러그인, 앱의 내비게이션을 구현하도록 돕는 도
내비게이션 컨트롤러는 내비게이션에 있어서 핵심 개념임, 이는 내비게이션 그래프를 가지고 있으며 그래프 내의 목적지 사이에서 이동할 수 있도록 메소드를 제공함내비게이션 컴포넌트를 사용한다면 NavController 클래스를 사용해 내비게이션 컨트롤러를 생성할 수 있음,
내비게이션 컴포넌트는 앱의 탐색을 관리하기 위해 내비게이션 그래프를 사용함, 내비게이션 그래프는 앱의 모든 목적지와 그들이 어떻게 연결되어 있는지를 가지고 있는 자료구조임 >노트: 내비게이션 그래프는 사용자가 최근에 방문한 목적지를 보관하는 스택인 백스택과는 별개입니