주제 : 안드로이드 소개(2일차)
발표자 : 박성서 안드로이드펍 대표 (http://androidpub.com)
자료1 : 안드로이드 소개
자료2 : 안드로이드 실습
- APK (애플리케이션 패키지)
- 컴포넌트들의 집합 (Activity, Service, Content Provider, Broadcast Receiver)
- Activity 란 ?
- 유저 인터페이스 콤포넌트를 화면에 표시하고 시스템이나 사용자의 반응을 처리
- 보통 UI 에서 하나의 스크린
- 개개의 Activity 느 다른 어플리케이션에서 호출 가능
- 기존의 Activity는 같은 기능을 하는 새로운 것을 대체될 수 있다.
- 하나의 자바 클래스로 생성
- apk 위의 프로세스에서 돌아간다.
- Task
- 액티비티의 모음이다. (연결해서 동작하는 액티비티들의 모음)
- 다른 플랫폼에서는 하나의 애플리케이션의 개념
- 경계가 없는 애플리케이션
- 여러개의 Process 와 APK에 걸쳐 있을 수 있다.
- 자신의 UI History 스택과 연결
- ActivityManager
- 애플리케이션 컴포넌트들을 관리하는 시스템 서버
- AndroidManifest.xml 정보를 가져와서 관리 함
(Acitivity 추가시 res/AndoridManifest.xml 에도 기재해야하는 이유)
- Intent
- 인텐트는 수행할 동작에 대한 설명을 담고 있다.
- Process
- 안드로이드 프로세스 = 리눅스 커널 프로세스
- 기본적으로 하나의 프로세스마다 하나의 쓰레드
- 메인 쓰레드와 워커 쓰레드랑 구분
- Process LifeCycle
- 프로세스는 필요할 때 알아서 시작된다. (시작/종료 할 필요 없음)
- 시스템이 해당 애플린케이션의 코드를 실행할 필요가 있을 때 시작
1) 서비스에 바이딩 할 때
2) 컨텐트 프로바이더에 바인딩 할 때
3) 액티비티를 시작할 때
4) BroadcastReceiver를 처리 할 때
- 메모리가 부족할 경우 중요하지 않은 순서로 메모리에서 프로세스를 제거한다.
- 순서..
1) Foreground 액티비티 : 현재 포커스를 가지고 있는 액티비티
2) Visible 액티비티 : 포커스는 없지만 화면에 보이는 액티비티
3) Background 액티비티 : 화면에 보이지 않는 액티비티
(이 처리를 잘해야한다. 어떻게 ??? 흠)
4) Empty : 액티비티를 가지고 있지 않은 프로세스
- Views
- 기본 View : TextView, EditText, ListView
- 고급 View : ImageView, MapView (Andorid Add on 으로 들어감, 구글제공), WebView (html 페이지를 view 해주는 강력한 기능)
- Layout : View 가 어떻게 배치될지 제어
- AbdoulteLayout: x,y 좌표로지정 => deplicated 됨, 상위버전에서 지원안됨
- LinearLayout, RelativeLayout 사용 권장
- FrameLayout, TableLayout (상대적으로 많이 사용되지 않음)
- Activity Life Cycle
- 액티비티는 현재의 상태를 가지고 있고 변화 시 라이프 사이클 메소드가 호출됨
- 3개의 그룹
1) 스타팅 업 : onCreate, onStart, onRestart
2) 노멀 익스큐션 : onPause
3) 셧다운 : onStop/onDestory - 호출이 보장 되지 않음
새로운 Activity 가 호출 되면 메모리에는 onStart 상태까지는
스택에 남아있다. onCreate 부터 할 필요 없음
onPause 이후에는 프로세스가 죽을 수도 있어서
필요한 데이타는 메모리가 아닌 다른 형태로(파일) 저장할 필요 있음
Dialog 같은 경우 Activity 가 아니라 하나의 Window 라 (팝업이라 보는게 맞음) Activity Life Cycle 에 영향을 주지 않는다.
장치슬립시 처리를 잘 해줘야함 (문서 찾아봐야 할 것 같음...)
- 서비스
- UI 를 가지지 않고 백그라운드에서 작업을 수행하는 컴포넌트
- 쓰레드나 별도의 프로세스가 돌아가진 않음
- Thread
- 모든 컴포넌트는 하나의 쓰레드를 공유
- Looper : 메시지 큐 처리, 싱글 쓰레드에서 동작, 안전하지 않음
직접 호출할 수 없고 Mian Thread 에 Message Handler 를
통해 다뤄짐
만약 UI 쓰레드에서 웹에서 이미지를 다운로드 받아 처리하는 게 있다면
다운로드하는 동안엔 UI 쓰레드가 멈추게 된다. 이럴 경우에는 별도의
쓰레드를 구성하여 백그라운드로 돌려줘야하고 결과는 바로 적용할 수
없기에 UI 쓰레드에서 처리할 수 있는 메소드를 만들어놔야 한다.
- Intent
- Message Object
Activity Manager 에게 메시지를 보냄
- 인텐트는 여러 Data 와 Action 으로 구성된다.
Action : VIEW, EDIT, DIAL...
Data : URI 형태로 되어있는 연관 데이터
Category : 추가적인 정보 포함
- Data 중심의 경계 없는 어플리케이션 구조
전화를 거는 행위(데이타)를 하면 그 이후에 어떻게 처리를 할 건지는
인텐트에서 결정한다. (Data 중심으로 처리, ex. 구글맵)
- Intent Filter
- BroadcastReceiver
Posted by Tcher