본문 바로가기

Programming/Android

[Android] #6 Android Application

안드로이드 플랫폼에는 Application 이외에도 Activity도 있고 Task라는 개념도 있다. 일단 이런 용어 정리들을 하고 본격적으로

Android에 빠져보겠다.


Android Application Basic Concept

 안드로이드 Application의 기본적인 concept은 Application, Activity, Activity Stack 그리고 Task 4가지라고 한다. 각각의 concept은 다음과 같다.


Application
 

Application은 보통 하나 이상의 Activity와 Recource 등이 하나로 묶여 있는 Bundle을 말한다. Application은 APK형식의 파일로 되어 있으며 단말에 복사 설치 할 수 있다.


Activity

 Activity는 Android Application의 기본 구성 단위로 특정 동작의 수행을 나타내는 객체이다. 보통 Application의 경우 수 개의 Activity로 구성되며 이들 간의 다른 Activity를 호출하거나 다른 Activity에게 노출하여 다양한 조합으로 Application이 구성된다.

Android 단말을 이용할 경우 User interface를 통해 Activity들을 하나씩 시작하며 이동하게 되고, 내제된 동작에 대해 전혀 생각하지 않게 되므로 Activity 간의 전환이라든지 Task간의 전환은 일관된 모습을 가져야 한다.

Activity들은 특정 타입의 Content를 처리하며 사용자 행동을 입력 받도록 되어 있다. Usually 각각의 Activity들은 Life Cycle을 가지게 되는데 이는 다른 같은 Application이나 Task 내에서도 indepent하다. 각 Activity들은 독립적으로 시작되고, 필요에 따라 사용자 혹은 시스템에 의해 시작, 실행, 중지, 재게, 정지 그리고 재시작 한다. Activity들은 독립적이기 때문에 다양한 방법으로 재사용 될 수도 있고 다른 Activity들로 대치될 수도 있다.


Activity Stack

 사용자가 Activity간의 전환에 따라 Android system은 사용자가 접했던 Activity들을 순차적으로 기록 유지하고 있게 된다.

이것이 Back Stack으로 알고 있는 Activity Stack이다. 일반적으로 사용자가 새로운 Activity를 생성시, Activity Stack에 추가되므로 Back키를 누르면 Stack에 있는 이전 Activity를 보여준다. 그러나, 사용자가 마지막으로 Home으로 온 경우 BACK키를 눌러도 되돌아 갈 수가 없다.

현재 Stack에 Activity를 추가하는 것은 Activity가 새로운 Task로 시작하는 것과는 상관이 없으므로 뒤로 돌아가는 것은 이전 Task에서 있는 Activity들로 돌아가는 것을 허락하는 것이다.

사용자는 Application Launcher나 short-cut 아니면 "Recent Task"스크린에서 Root Activity를 선택함으로써 가장 최근의 Home보다 더 빨리 Task를 가질 수 있다.

Activity만이 Activity Stack에 더해 질 수 있으므로(view, window, menu, dialog는 당연 안됨허걱) , 사용자가 스크린 A를 가지고 있고 다음 이어진 순서로 스크린 B로 갔다가 BACK키를 눌러 스크린 A로 돌아오기를 원한다면, navigation을 설계할 때 스크린 A는 Activity로 구현되어야 하는 것이다. 하나의 예외가 있다면 Application이 manage navigation 자체를 관리하는 경우이다.


Task

 Task는 사용자가 특정 목적을 이루기 위해 따르게 되는 연속된 Activity들로 Activity가 어떤 Application에 속해 있는지는 상관하지 않는다.

그러므로 새로운 Task에 대해 명확하게 정해지기 전까지 사용자가 시작하는 모든 Activity들은 현재 Task의 일부로 간주된다. 이런 Activity들은 다른 Application에도 있을 수 있다는 것이 새롭다. Contact에서 시작한 task가 E-mail address를 선택해서 e-mail Activity를 유지하고, file을 첨부해서 picture gallery에서 이미지를 선택 할 수 있는 것이다. Contacts, e-mail 그리고 picture gallery모두 별도의 application이다.

Task를 시작하는 Activity는 Root Activity에서 호출된다. 이는 반드시 그런 것은 아니지만 Application Launcher, Home Screen의 Shortcut 아니면

"Recent tasks"(Home key를 오래 누르는 경우 발생)에서 빈번히 호출된다. 사용자들은 Task를 처음 시작했을 때와 마찬가지로 root activity에 대한 icon을 선택함으로써 Task로 되돌아 갈 수 있다. 한 번 Task에 속해지면, BACK키를 눌렀을 때 Task의 이전 Activity로 되돌아가게 되는 것이다.

보통 Activity Stack은 하나 혹은 그 이상의 Task로 구성된다.

Task에 대한 몇 가지 Example

    * 첨부 데이터와 함께 sms를 전송한다.

    * 유투브 비디오를 보고 e-mail로 다른 사람들과 공유한다.


Interruping the Task

Task의 매우 중요한 속성은 사용자가 다른 Task를 수행하기 위해 현재 실행중인 Task를 Interrupt할 수 있으며, 떠나 왔던 원래 Task를 완료하기 위해 다시 되돌아 갈 수 있다는 것이다. 이것은 사용자들이 여러개의 Task를 동시에 실행할 수 있으며 Task간 전환도 할 수 있게 하는 것이다. 다른 Task로 넘어가는 방법이 두가지가 있는데, 사용자는 Interrupt 전의 위치로 되돌아 올 수 있어야 한다.

* 사용자는 notification에 의해 Interrupt된다. -notification은 나타나면 사용자는 그에 맞는 동작을 하길 원한다.

* 사용자가 다른 Task를 수행 하길 원한다 - 사용자는 HOME 키를 눌러 HOME으로 되돌아가 application을 실행한다.

물론 예외적인 규칙이 존재하는데 위에 언급된 두가지 방법 외에, Task를 시작하는 제 3의 방법은 Activity를 시작 할 때 자기 자신을 Task로 시작하게 하는 경우다. Maps와 Browser가 이런 동작을 하는 Application이다.

예를 들어, E-mail에서 address를 선택하는 것은 Maps Activity를 새로운 Task로 시작하는 것과 같고, E-mail에서 Link를 선택하는 것은 Browser Activity를 새로운 Task로 시작하는 것과 같다. 이런 상태에 BACK키를 누른 경우 HOME에서 시작한 것이 아니므로 다른 Task에 있는 이전 Activity로 되돌아 가게 된다.