(광주인공지능학원) 안드로이드 기초
기본 아키텍쳐
리눅스 커널
일단 가장 아랫단에, Linux 커널 이 올라가 있다. 일반적인 Linux 커널과 크게 다르지는 않지만, 모바일 디바이스에 최적화된 전력 관리 기능이나 안드로이드에 최적화된 Binder IPC (프로세스간 커뮤니케이션) 부분등이 포함되어 있다.
시스템 라이브러리
리눅스 커널위에는 C로 구현된 몇가지 네이티브 라이이브러리들이 올라가 있다. 3차원 그래픽을 위한, OPEN GL, 로컬 데이타 베이스를 제공하는 SQLLite 데이타 베이스, 웹 브라우징을 위한 WebKit, 멀티미디어 재생을 위한 Media Framework들이 올라가 있다.
이러한 시스템 라이브러리들은 내부적으로 JNI 인터페이스를 통해서 자바 코드로부터 호출되게 된다.
안드로이드 런타임
이러한 시스템 라이브러리 위에, 안드로이드 런타임이 올라가 있는데, 안드로이드 런타임은 JVM (Java Virtual Machine)이다. 단, 모바일 애플리케이션을 위해서 최적화된 JVM으로 안드로이드는 달빅(Dalvik)이라는 이름의 VM이 올라간다. 이 달빅 JVM이 실제로 안드로이드 애플리케이션을 시작하게 되낟. 그리고, 그위에 코어 자바라이브러리들이 올라가게 된다. (java.*, javax.* ,org.* ...등)
애플리케이션 프레임웍
안드로이드 런타임 까지 기본 JVM과 자바 라이브러리가 올라갔다면 애플리케이션 개발 프레임웍은 라이브러리이다. 마치 서버 개발에서 자바 위에, JEE 나 스프링,Hibernate와 같은 프레임웍이 있는 것 같이 애플리케이션 개발용 프레임웍이 올라가 있다.
- Package manager : 어떤 애플리케이션들이 설치되어 있는지를 관리한다.
- Windows manager : 윈도우 화면을 관리 (윈도우란, 영역으로 맨 윗부분의 네비게이션바, 다이얼로그 형식으로 나오는 윈도우등등 모든 윈도우 시스템을 관리하는 부분이다.)
- View manager : 기본적인 그래픽 컴포넌트를 관리 한다. 라디오 버튼이나, 탭, 버튼등.
- Resource manager : 컴파일이 되지 않는 리소스를 관리한다. 예를 들어 폰 애플리케이션에 같이 패키징된 string, 이미지 파일등을 관리한다. (안드로이드 프로젝트상 main/res 내에 있는 것을 관리하는 듯)
- Activity manager : 안드로이드의 액티버티를 관리한다. 이 액티버티는 안드로이드 애플리케이션내의 하나의 화면에 해당(?)하는 것으로, 이 액티버터의 생성 및 소멸까지의 라이프 싸이클을 관리한다.
- Contents provider: 데이타 저장소에 대한 추상화된 계층으로, 이 Contents Provider 계층을 통하여, 데이타를 저장할 수 있고, 이 저장소를 다른 애플리케이션에게 공유하여 애플리케이션 간에 데이타를 공유할 수 도 있다.
- Location manager : 위치 관련 서비스 기능을 제공한다.
- Notification manager : notification bar에 중요한 이벤트를 보여주는 기능을 제공한다. (푸쉬 시스템도 여기서 관리 하나?)
기본 애플리케이션
그위에, 기본적으로 폰에 프리로드 되어 설치되는 애플리케이션들이 존재한다. 연락처, 메신져, 브라우져, 카메라등의 기본적인 애플리케이션 등이 이에 해당한다.
안드로이드 생명주기 세부요소 정리
메소드 | 설명 | 다음 메소드 |
onCreate() | 액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용됨 | onStart() |
onRestart() | 액티비티가 멈췄다가 다시 시작되기 바로 전에 호출됨 | onStart() |
onStart() | 액티비티가 사용자에게 보여지기 바로 전에 호출됨 | onResume() 또는 onStop() |
onResume() | 액티비티가 사용자와 상호작용하기 바로 전에 호출됨 | onPause() |
onPause() | 다른 액티비티가 보여질 때 호출됨. 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드 | onResume() 또는 onStop() |
onStop() | 액티비티가 더 이상 사용자에게 보여지지 않을 때 호출됨. 메모리가 부족할 경우에는 호출되지 않을 수도 있음 |
onRestart() 또는 onDestory() |
onDestory() | 액티비티가 소멸될 때 호출됨. finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 파기할 때 호출됨 |
없음 |
INTEND 주요요소 정리
액션 | 대상 | 설명 |
ACTION_CALL | Activity | 통화를 시작 |
ACTION_EDIT | Activity | 데이터를 표시하고 편집 |
ACTION_MAIN | Activity | 메인 액티비티를 실행 |
ACTION_VIEW | Activity | 뭔가를 보여줌 |
ACTION_DIAL | Activity | 통화모드 |
ACTION_BATTERY_LOW | BR | 배터리 부족 |
ACTION_HEADSET_PLUG | BR | 헤드셋이 장비에 접속 or 분리 |
ACTION_SCREEN_ON | BR | 화면이 켜짐 |
ACTION_TIMEZONE_CHANGED | BR | 타임존이 변경 |
-Intent를 이용하여 특정기능을 사용하는 App 호출시 권한승인이 필요하지 않음 ( 민감한 권한 제외 )
-App이 직접 특정기능을 사용하는 경우 권한승인 (Marshmallow 6.0 이상)
"스마트인재개발원에서 진행된 수업내용입니다"
스마트인재개발원
4차산업혁명시대를 선도하는 빅데이터, 인공지능, 사물인터넷 전문 '0원' 취업연계교육기관
www.smhrd.or.kr