일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Friendship
- 하이퍼바이저
- 삼성
- Neural Network
- 파이썬
- 빅데이터
- 패턴 인식
- 동아리
- NarwalFreo
- 인공지능
- 고려대학교
- 삼성전자 소프트웨어멤버십 SSM
- 나르왈프레오
- 삼성소프트웨어멤버십
- 멤버십
- 가상화
- 신경망
- 갤럭시탭S8울트라
- 물걸레로봇청소기추천
- Python
- 증강현실
- Google App Engine
- 물걸레자동세척로봇청소기
- Bidirectional Associative Memory
- 구글 앱 엔진
- 신경회로망
- 패턴인식
- hopfield network
- BAM
- SSM
- Today
- Total
정보공간_1
[3기 신촌 최기환] 안드로이드 런처의 구조 본문
안녕하세요.
신촌 멤버십 21-2기 최기환입니다.
이번시간은 안드로이드 기본 런처의 구조에 대해 분석해보는 시간을 갖도록 하겠습니다.
안드로이드 런처를 제작하거나 기본런처를 수정, 다른 어플리케이션에서 접근 할 일이 있을 때
도움이 되었으면 좋겠습니다.
먼지 기본 용어에 대한 설명을 하겠습니다.
용어 |
정의 |
Launcher |
Android 기반 단말기에서 다른 애플리케이션을 실행할 수 있는 UI를 제공하는 애플리케이션이다. 단말기가 구동되는 동안 항상 실행되어 있으며, 부가적으로 Home screen이라는 영역을 제공하여 애플리케이션의 단축 아이콘이나 위젯을 배치할 수 있다. |
Workspace |
Launcher에서 애플리케이션 단축 아이콘 및 위젯을 배치할 수 있는 영역이다. 홈 스크린(Home screen)이라고도 부른다. |
Hotseat |
자주 실행하는 애플리케이션/폴더를 배치할 수 있는 Launcher 하단의 영역이다. |
위젯 |
홈스크린에 표시할 수 있는 애플리케이션 단축 아이콘 및 홈스크린 위젯 |
런처 어플리케이션은 하나의 액티비티만을 사용하며 이 액티비티는 DragLayer 로 구성되어 있습니다.
이 DragLayer 는 Quick Search Bar, 5개의 CellLayout(하나의 페이지를 의미) 을 갖는
Workspace 와 WorkspaceDivider, 현재 어떤 페이지가 화면에 표시되는지 알려주는 Scroll Indicator,
독 아이콘이 있는 Hotseat 으로 구성되어 있습니다.
안드로이드 런처 어플리케이션은 수십개의 클래스로 이루어져 있으며
그 중 핵심 클래스를 살펴보겠습니다.
이름 |
역할 |
Launcher |
Workspace 및 Hotseat가 표시되는 액티비티로, 실질적인 Launcher의 기능을 제공한다. |
LauncherApplication |
Launcher 애플리케이션 전반에서 공유하는 객체를 제공하고, 애플리케이션 및 각종 아이콘, 위젯 변화를 감지하기 위한 브로드캐스트 리시버를 설정한다. |
LauncherModel |
Launcher가 구동되면서 참조하는 각종 정보(애플리케이션 리스트, 홈스크린 배치 정보)를 관리한다. |
LauncherProvider |
Launcher의 홈스크린(Workspace) 및 Hotseat에 표시되는 데이터를 데이터베이스로 관리하기 위한 각종 기능을 제공한다. |
DragLayer |
Workspace 와 Hotseat, Divider 를 포함하는 뷰그룹으로 자식 요소들간의 드래그 기능, 페이드인&페이드아웃 애니메이션, 드롭애니메이션 동작을 담당한다. |
Workspace |
Wallpaper 와 다수의 페이지를 포함하는 클래스. 3D 페이지전환, 아이콘&위젯 추가와 이동, 줌인 줌아웃 애니메이션, 페이지 내에서의 드래그 동작, 폴더 생성 등 그래픽 처리작업의 핵심적인 역할을 담당한다. |
CellLayout |
Launcher 의 홈스크린(Workspace) 에서 아이콘과 위젯이 표시되는 영역. 한개의 페이지에 관한 정보와 아이콘&위젯 컨테이너를 갖고있다. 공간이 없는 곳에 아이콘이 추가 될 때 인접한 빈공간을 찾는 기능을 수행한다. |
이중 가장 핵심 적인 클래스는 Workspace 로 그래픽 처리작업의 대부분을 담당합니다.
화려한 UI 구성을 위한 각종 애니메이션이 정의되어 있습니다.
Workspace 에서 중요한 멤버와 함수를 살펴 보면
Member variables
· private Drawable mBackground
o 배경화면
· Private CellInfo mDragInfo
o 현재 드래그 중인 셀의 정보
· private int mDefaultPage
o 초기 페이지 번호를 저장하는 변수
· private CellLayout mDragTargetLayout
o 아이콘이나 위젯등을 드래그 중일 때 타겟이 되는 레이아웃
· private State mState
o 일반 런처 홈화면인지 All Apps 를 실행 중인지 판단하는 상태 변수
· Private Boolean mInScrollArea
o 유저가 아이템을 페이지가 넘어가는 스크롤 영역에 이동시켰는지 판단하는 변수
· private FolderRingAnimator mDragFolderRingAnimator
o 사용자가 단축 아이콘을 서로 겹치게 드래그 했을 때 작동하는 폴더링 애니메이션을 처리한다.
· private int mDragMode
o 현재 드래그 모드를 판단하는 변수이며 다음 중 하나의 상태를 갖는다.
§ DRAG_MODE_NONE – 드래그 중이지 않을 때
§ DRAG_MODE_CREATE_FOLDER – 폴더를 생성 중 일 때
§ DRAG_MODE_ADD_TO_FOLDER – 이미 생성된 폴더에 아이콘을 추가 중일 때
§ DRAG_MODE_REORDER – 아이콘 순서를 재배치 중일 때
Methods
· void addInScreen(View childe, long container, int screen, int x, int y, int spanX, int spanY, Boolean insert)
o 워크 스페이스에 페이지를 추가하는 함수. 스크린의 grid 내에서의 위치(x, y)와 셀의 수(spanX, spanY)를 설정 할 수 있다.
· public void onDragStart(DragSource source, Object info, int dragAction)
o 드래그가 시작되었을 때 호출되는 콜백함수로 화면의 Orientation 을 잠그고 아이콘을 삭제할 수 있는 공간을 활성화 시킨다.
· private float getOffsetXForRotation(float degrees, int width, int height)
o 3D 페이지 전환을 위해 y축 중심으로 회전하는 페이지의 offsetX 를 구하는 함수
· protected void snapToPage(int whichPage)
o 화면전환의 핵심적인 역할을 하는 함수로 Workspace 의 Parent 인 PageView 클래스에 정의되어 있다. 페이지 이동이 시작되는 동작과 스크롤바의 visibility, 스크롤의 시작위치와 끝위치 등을 계산한다. 페이지가 완전히 전환된 경우 loadAssociatedPages() 함수를 이용해 액티비티 내의 모든 뷰를 제거하고 새 페이지의 뷰를 삽입한다.
CellLayout 에서는 단축 아이콘과 위젯을 포함하는 뷰 그룹인 ShortcutAndWidgetContainer 가 있어
화면내의 모든 오브젝트들을 관리합니다.
마지막으로 런처에 사용된 데이터베이스 모델입니다.
런처의 Workspace 및 Hotseat 에 추가되는 항목들(아이콘, 위젯)의
배치정보를 저장하는 데이터 베이스이며 그 구조는 다음과 같습니다.
Fields
TITLE
· 홈스크린에 표시되는 아이콘의 이름
· Field type : TEXT
INTENT
· 해당 항목을 선택(터치)했을 때 실행할 작업. 인텐트 정보(action, category, launchFlags, component)가 포함되어 있다. 폴더나 홈스크린 위젯은 이 정보를 포함하고 있지 않다.
· Field type : TEXT
CONTAINER
· 항목의 위치를 나타낸다. 항목은 홈스크린(Workspace)와 하단 Dock(Hotseat)에 위치할 수 있다. Workspace일 경우 -100을, Hotseat일 경우 -101이 할당된다.
· Field type : INTEGER
SCREEN
· 항목이 위치한 Workspace의 인덱스를 나타낸다. AOSP Launcher의 경우 0~4의 범위를 가지며, 항목이 Hotseat에 있을 경우 여기에 아무 값이나 들어가도 무방하다.
· Field type : INTEGER
CELLX
· 항목이 위치한 곳의 x좌표를 나타낸다. 좌표는 좌측 상단을 기준으로 한다.
· Field type : INTEGER
CELLY
· 항목이 위치한 곳의 y좌표를 나타낸다. Hotseat에 있는 항목의 경우 이 필드를 사용하지 않는다.
· Field type : INTEGER
SPANX
· 홈스크린에서 차지하는 가로 크기를 나타낸다. 단위는 Cell이다.
· Field type : INTEGER
SPANY
· 홈스크린에서 차지하는 세로 크기를 나타낸다. 단위는 SPANX와 마찬가지로 Cell이다.
· Field type : INTEGER
APPWIDGET_ID
· 각각의 홈스크린 위젯(Appwidget)에 할당된 고유 ID를 나타낸다.
· Field type : INTEGER
IS_SHORTCUT
· 현재 사용하지 않음 (Deprecated)
· Field type : INTEGER
ITEM_TYPE
· 항목의 종류를 나타낸다.
· Field type : INTEGER
· @see BaseLauncherColumns.ITEM_TYPE_APPLICATION
· @see BaseLauncherColumns.ITEM_TYPE_SHORTCUT
· @see Favorites.ITEM_TYPE_FOLDER
· @see Favorites.ITEM_TYPE_APPWIDGET
ICON_TYPE
· 아이콘을 리소스 기반으로 불러올지 데이터베이스에서 불러올지 설정한다.
· Field type : INTEGER
· @see BaseLauncherColumns.ICON_TYPE_RESOURCE
· @see BaseLauncherColumns.ICON_TYPE_BITMAP
ICON_PACKAGE
· ICON_TYPE를 ICON_RESOURCE로 지정한 경우 아이콘이 있는 패키지 이름을 나타낸다.
· Field type : TEXT
ICON_RESOURCE
· ICON_TYPE를 ICON_ RESOURCE로 지정한 경우 아이콘의 리소스 주소를 나타낸다.
· Field type : TEXT
ICON
· ICON_TYPE을 ICON_BITMAP으로 지정한 경우, 아이콘의 비트맵 데이터를 나타낸다.
· Field type : BLOB
URI
· Live folder 지원을 위한 항목으로, 더 이상 사용되지 않는다.
· Field type : TEXT
DISPLAY_MODE
· Live folder 지원을 위한 항목으로, 더 이상 사용되지 않는다.
· Field type : INTEGER
이상으로 런처의 핵심 클래스들의 역할과 Workspace 클래스,
런처의 데이터베이스 모델에 대해 간략하게 알아보았습니다.
안드로이드 런처 제작시 이미 어느정도 완성되어 있는 오픈소스들이 상당 수 있습니다.
이를 활용하는 방법도 개발에 도움이 되실겁니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[3기 대전 김재원] Linux Kernel - Data Structure (1) (0) | 2013.04.03 |
---|---|
[3기 전주 전환규] Place & Route Part.1 (0) | 2013.04.02 |
[3기 신촌 윤기백] Wireless Sensor Network에 대해서 (0) | 2013.03.11 |
[3기 강남 이소영] Photoshop/illustrator 유용한 단축키 (0) | 2013.03.07 |
[3기 강남 백정의] Android Web View에 관하여. (0) | 2013.03.07 |