본문 바로가기

Android Studio (Kotlin)

Android Architecture

안드로이드 플랫폼 아키텍처

  • Linux Kernel : 보안, 메모리관리, 프로세스관리, 파일시스템 관리, 파워 관리, 네트워크 스택, 하드웨어 드라이버 등 하드웨어를 지원
  • HAL : Hardware Abstraction Layer(하드웨어 추상화 계층) : 상위 수준의 Java API 프레임워크에 기기 하드웨어 기능을 노출하는 표준 인터페이스를 제공. 여러 라이브러리 모듈로 구성되어 있으며 카메라 또는 블루투스 모듈과 같은 특정 유형의 하드웨어 구성 요소를 위한 인터페이스를 구현
  • Native C/C++ Libraries : 안드로이드 프레임워크에서 필요한 C와 C++ 라이브러리를 제공
  • Android Runtime : 코어 라이브러리 지원, 가상머신으로 안드로이드 애플리케이션 실행 환경을 제공
  • Java API Framework : 안드로이드 애플리케이션 개발 시 필요한 API를 제공
  • System Apps : Email 클라이언트, SMS 프로그램, 달력, 지도, 브라우저 등의 코어 애플리케이션을 제공

App Components

컴포넌트 

  • 앱의 구성단위, 컴포넌트를 여러개 조합하여 하나의 앱을 만든다.
  • 앱 내에서 독립적인 실행 단위이다. 
  • Activity, Service, Content Provider, Broadcase Receiver

컴포넌트의 종류

  1. 액티비티 : UI를 구성하기 위한 컴포넌트
  2. 서비스 : UI 없이 백그라운드에서 수행하는 컴포넌트
  3. 콘텐트 프로바이더 : 애플리케이션 간 데이터를 공유하기 위한 컴포넌트
  4. 브로드캐스트 리시버 : 이벤트로 수행되는 컴포넌트 ex) 시스템에 배터리가 부족하거나 시스템 부팅이 완료되는 등의 이벤트가 발생했을 때 해야하는 작업이 있을 때 이벤트를 수신하는 컴포넌트

DVM VS ART

DVM : Dalvik Virtual Machine

  • 앱 실행 시 컴파일
  • 설치 시 컴파일을 하지 않기 때문에 ART 보다 설치 속도가 빠르다.
  • 실행 시 컴파일을 하기 때문에 ART에 비해 실행 속도가 느리다.
  • 용량이 작다.

ART

  • 앱 설치 시 컴파일
  • 설치 시 컴파일을 하기 때문에 DVM 보다 설치 속도가 느리다.
  • 실행 시 컴파일을 하지 않기 때문에 DVM보다 실행 속도가 빠르다.
  • 용량이 크다.

디렉터리 파일 구조

  • AndroidManifest.xml : 앱의 메인 환경 파일. 새로운 컴포넌트를 생성하면 manifest 파일 추가해야한다.
  • MainActivity.kt : 화면 구성을 위한 액티비티 컴포넌트로 실제 이 파일이 수행되어 화면에 UI가 출력된다.
  • res : 앱의 모든 리소스 파일은 res 폴더 하위에 위치한다.
  •   - res/drawble : 리소스 중 이미지 파일을 저장하기 위한 폴더
  •   - res/layout :  리소스 중 UI 구성을 위한 레이아웃 xml 파일을 위한 폴더
  •   - res/mipmap : 리소스 중 앱의 아이콘 이미지를 위한 폴더
  •   - res/values : 리소스 중 문자열 값 등을 위한 폴더

Activity란?

  • 사용자에게 UI화면을 제공하는데 있어 가장 기본이 되는 앱 컴포넌트
  • 안드로이드 앱은 0개 이상의 Activity 를 가져야 한다. 화면이 없는 앱도 존재한다. -> 반드시Activity가 존재해야하는 것은 아니다.
  • 하나의 앱은 앱 최초 실행 시 보여지는 하나의 메인 액티비티를 가진다.
  • 액티비티에 다양한 컴포넌트들을 추가하여 다채로운 UI를 구성할 수 있다.

Manifest

새로운 컴포넌트를 생성하면 manifest 파일에 추가해줘야 한다.

 

Intent

intent : Activicy, Service, Broadcase Receiver, Content Provider 간에 작업 수행을 위한 정보를 전달한다. intent를 통해 메시지를 전달하고, 데이터를 주고받기도 한다.

명시적 인텐트와 암시적 인텐트로 구분한다.

 

Activity 생명주기의 필요성

Activity 생명주기를 통해 특정 Activity의 상태를 메서드로 표현하여 해당 메서드에서 원하는 기능 개발을 수행

onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy() 순으로 실행, 경우에 따라 onRestart() 호출

  • onCreate() : Activity가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용된다. 주로 View를 만드는 작업을 수행
  • onStart() : Activity가 사용자에게 표시되기 직전에 호출, onStop()과 짝을 이뤄 사용된다. 네트워크 통신을 위한 API 호출 관련 코드를 onStart()에서 주로 다룬다
  • onResume() : Activity가 사용자와 상호작용하기 바로 전에 호출. 함수들이 다 호출되고 나면 app은 Activity Running 상태가 된다. 이 시점에서 Activity는 Activity Stack의 최상단에 있게 된다. onPause()와 짝을 이뤄 사용된다.
  • onPause() : Activity가 사용자에게 보여지지 않을 때 호출된다. 예를 들어 비디오를 잠시 중지했을 때, 비디오를 중지한 지점을 onPause()에서 저장할 수 있다.
  • onStop() : Activity가 더 이상 사용자에게 보여지지 않을 때 호출. 이 경우에는 onRestart를 거쳐 onStart 생명주기로 넘어가 애플리케이션을 다시 실행할 수도 있다. 아직 Activity가 완전히 소멸된 상태는 아니다.
  • onDestroy() : Activity를 완전히 종료, 즉 애플리케이션을 완전히 종료 했을 경우 호출된다. 애플리케이션을 다시 실행하면 onCreate()부터 생명주기가 다시 시작된다. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 Activity를 제거할 때 호출된다.
  • onRestart() : onStop()이 호출됐다가 Activity가 다시 화면에 보여질 때 onRestart()를 거쳐 onStart()가 호출된다. 비디오 재생 중 홈화면으로 나갔다가 다시 돌아왔을 때, onRestart()에 필요한 작업들을 해줄 수 있다. 

'Android Studio (Kotlin)' 카테고리의 다른 글

Kotlin 기본 문법  (0) 2022.04.04
코틀린 컬렉션과 예외처리  (0) 2022.04.04
Kotlin 클래스  (0) 2022.04.03
안드로이드 UI 기본  (0) 2022.04.03
EditText 빈 값일 때 toast 띄우기, toast 창이 안뜰 때  (0) 2022.03.29