'프레임 상태'에 해당되는 글 1건

  1. 2013.12.15 Native Application Medel

타이젠(Tizen) Native 어플리케이션 모델은 어플리케이션 생명주기(life-cycle)과 시스템 이벤트들을 Native Framework에서 처리한다.


Multitasking in Tizen 

타이젠 플렛폼은 멀티 테스킹을 지원한다. 하지만 여러개의 Native 어플리케이션을 동시에 실행하는 경우, 하나의 어플리케이션이 백그라운드에서 실행되는 동안, 다른 하나의 Tizen UI응용 프로그램이 포 그라운드에서 실행할 수 있다.


동시에 여러개의 어플리케이션이 동시에 백그라운드에서 작업을 할경우에는 메모리의 부족현상이 발생할 수 있다. 시스템의 메모리가 부족하게 되면 시스템이 충분한 메모리를 다시 사용할 수 있을때까지 어플리케이션을 하나씩 종료시킨다. 시스템은 가장 마지막에 백그라운드에서 작업을 한 어플리케이션 순서대로 종료한다. 메모리 상태가 정상적으로 될때까지 시스템은 강제로 어플리케이션을 종료하고, 그에 대한 경고를 사용자에게 알려주지 않는다.


어플리케이션의 종료는 정의된 멀티테스킹 우선순위에 따라 발생한다. 예를들면, 어떤 한 오디오를 재생하고 있는 어플리케이션이 다른 어플케이션 보다 더 높은 우선순위 레벨을 가지고 있을때, 사용자는 오디오 플레이가 중지되지 않기를 원하기 때문에 이 어플리케이션은 백그라운드상에 계속 존재한다. 어플리케이션이 오디오를 일시정지 혹은 정지를 하지 않고 계속 플레이 되고 있다면 멀티케스킹 우선순위 레벨은 높아진다.


메모리 부족으로 인한 종료의 우선순위는 다음과 같다.

1. Background UI application 

2. Service application

3. Background media player

4. Foreground UI application

5. Foreground media player

6. Application launcher

7. Voice or vedeo call, or other system application


메모리가 부족할 경우, 시스템은 어플리케이션을 종료하고 메모리에서 제거한다. 따라서 중요한 어플리케이션 종료로 인해 중요한 데이터가 손실되는 것을 방지 하기 위해, Tizen::App::IAppCheckpointEventListener를 이용하여 어플리케이션의 상태 혹은 context를 어플리케이션의 레지스터리나 저장공간에 저장을 하도록 구현하여야 한다.


Application Life-cycle (어플리케이션 생명주기)

Application life-cycle

다음 그림은 기본적인 UI 및 서비스 어플리케이션의 생명주기(Life-cycle)을 나타낸다. 프레임은 AddFrame() 메소드가 호출될때, UI Application에 의해 생성된다. 어플리케이션이 실행되면, OnAppInitializing() 이벤트 핸들러를 호출하고, 프레임을 추가한다. 만약 OnAppInitializing() 메소드가 false를 리턴하면 어플리케이션은 종료된다.


어플리케이션이 초기회된후, 이벤트를 처리 할수 잇으며, 어플리케이션은 실행(running) 상태로 셋팅된다. 어플리케이션이 실행되는동안 프레임은 3가지 상태(activated, deactivated, minimized)로 전이가 될수 있다. 그리고 종료키가 눌러지면 어플리케이션은 종료된다.


덧붙여서, 어플리케이션은 리소스가 충분하지 않을 때, 어플리케이션은 스스로 종료된다. OnAppTerminating()메소드가 호출되면 어플리케이션은 리소스를 해제한다. 어플리케이션이 프레임을 제거하면, 프레임은 destroy상태로 변하게 된다. 



Application Stste Transition(어플리케이션 상태 전환)

모든 타이젠(Tizen) Native Application은 4가지 상태를 가지고 있다. 다음 그림은 타이젠 어플리케이션의 상태변화를 나타낸다.

Tizen native application state transition

초기화 상태(Initializing)

어플리케이션 프레임워크가 어플리케이션을 초기화 한다.

이전 실행에서 저장된 어플리케이션 데이터가 복원된다.

UI 어플리케이션의 경우, 어플리케이션 프레임은 OnAppInitialized()메소드 혹은 OnAppInitializing()가 Tizen::App::UiApp클래스에 있는 AppFrame() 메소드를 이용하여 생성되고 추가된다. 


실행 상태(Running)

UI 어플리케이션이 실행되는 동안, UI 어플리케이션은 background와 foreground사이를 전환 할 수 있다. 전환하는 동안, 어플리케이션의 윈도우 상태가 변한다. Service Application은 항상 background에서 


종료중 상태(Terminating)

어플리케이션은 Tizen::App::AppRegistry 클래스는 이용하여 자신의 리소스를 제거하고, 자신의 프리퍼런스를 저장한다. 


종료 상태(Terminated)

어플리케이션 프레임워크는 어플리케이션을 메모리에서 제거한다.



Launching Applications(어플리케이션 실행)

UI 어플리케이션은 메인메뉴, task switcher 혹은 다른 어플리케이션을 통해 실행될 수 있다. 반면 서비스 어플리케이션은 다른 어플리케이션을 통해서만 실행이 가능하다. 모든 Native 어플리케이션은 registered condition(등록조건)을 만족시킬 때, 자동적으로 실행을 할 수 있다. 


어플리케이션을 시작하면, 프로세스 관리자는 메모리에 필요한 라이브러리와 어플리케이션 실행 바이너리를 메모리에 불러온다.  어플리케이션의 인스턴스는 OspMain() 메소드에서 생성 및 실행된다. 


어플리케이션 초기화 단게에서 Tizen::App::App클래스의 OnAppInitializing() 이벤트 핸들러가 호출된다. 


OnAppInitializing()

  - 이전 어플리케이션의 상태가 Tizen::App::AppRegistry클래스를 통해 로드되고 필요한 처리들이 수행된다.

  - OnAppInitializing() 이벤트 핸들러가 false를 리턴하면, 어플리케이션의 상태는 종료 상태(Terminated)상태로 변하게 되고 그후에 Destroy된다.


어플리케이션의 초기화가 끝나게 되면 OnAppInitialized() 이벤트 핸들러가 불려지게 된다. OnAppInitialized() 이벤트 핸들러가 리턴되기 전에,  UI Application 생성을 위해 프레임은 Tizen::App::UiApp AddFrame()함수를 이용하여 생성 되어야만 한다. 프레임이 생성되지 않는다면, 어플리케이션의 상태는 종료중 상태(Terminating)상태로 변하게 되고 어플리케이션이 종료하고 OnAppTerminating() 이벤트 핸들러가 호출된다. Form과 Form의 자식 컨트롤러와 같은 UI컨트롤러는 Tizen::Ui::Controls::Frame클래스의 OnAppTerminating() 이벤트 핸들러 안에서 생성되고 추가 될 수 있다.


OnAppInitialized() 이벤트가 성공하면, 어플리케이션은 실행중 상태(Running)가 된다. OnAppInitialized() 이벤트 리스너가 false를 리턴하면 어플키에시녀의 상태는 종료중 상태(Terminating)상태가 되고 어플리케이션을 종료하고 OnAppTerminating() 이벤트 핸들러가 호출된다. 

Launching UI applications



Frame State Transition (프레임의 상태 전환)

UI 어플리케이션은 어플리케이션 메인 윈도우의 가장 높은 렙레인 프레임을 가지고 있다. 프레임은  3가지 상태(activated, deactivated, minimized)를 가지고 있다. 프레임이 활성화된 상태(activated)라면, 입력장치로 부터 이벤트를 받을 수 있고, 볼 수 있다. 다른 프레임이 current frame의 가장 위쪽으로 이동하게 된다면, 프레임은 비활성화 상태(deactivated)가 된다. 예를 들면, 팝업 메세지가 표시 될 때 프레임은 비활성화 된다. 이때 화면이 부분적으로 보여지게 될때 비활성화 된 프레임은 입력장치로 부터 이벤트가 전달 되지 않는다.


새로운 프레임이 완전히 현재 프레임을 가려버리면, 이전 프레임의 상태는 최소화상태(minimized)상태가 되고 보여지지 않게 된다. 아래 그림은 프레임 상태 사이의 전환을 보여준다.

Frame state transition


UI어플리케이션이 활성화 되는 시점

  - 유저가 task swicher에서 어플리케이션을 선택

  - 유저가 어플리케이션이 실행 또는 최소화 되있지 않을때, 메인 메뉴의 어플리케이션의 아이콘을 눌렀을 때

  - 어플리케이션 비활성화 상태의 원인이 된 윈도우가 종료 되었을 때


UI어플리케이션이 최소화 상태(minimized)로 전환되어 그리던걸 다시 멈춘다면, UI어플리케이션이 다시 활성화 상태(activated)가 됬을때를 위해 UI어플리케이션은 그리던걸 기억하고 있다. 


전화가 오거나 알람이 울리는와 같이 다른 윈도우가 보여질때, UI어플리케이션은 비활성화된 상태(deactivated)상태가 된다. 

어플리케이션이 보여지지 않게 될때, 어플리케이션은 최소화상태(minimized)가 된다.


어플리케이션의 최소화 상태

  - 홈키 버튼을 눌렀을때

  - 다른 UI 어플리케이션이 실행되었을때


UI 어플리케이션이 최소화 되었을때는, 3D 혹은 애니메이션과 같은 그래픽 처리등은 중단되고, 불필요한 자원은 해제 된다. 그리고 미디어 처리와 센서 조작은 중단된다. 



Terminating Applications (어플리케이션의 종료)

실행 중이던 어플리케이션은 다음과 같은 이류로 종료 될수 있다.

  1. 타이젠 Native 어플리케이션이 자기 스스로 Tizen::App::App 클래스의 Terminated() 함수를 호출할 경우 어플리케이션은 종료된다.

  2. 메모리 혹은 베터리가 부족 할 경우, 시스템은 어플리케이션을 종료한다.


어플리케이션의 종료는 OnAppTerminating() 이벤트 핸들러에 의해 처리된다. 이 이벤트 핸들러가 호출이 된다면 native 어플리케이션의 자원은 해제되고 종료된다.


From과 From의 자식 컨트롤러와 같이 할당된 UI 컨트롤은 Tizen::Ui::Controls::Frame클래스의 Ontermninating() 이벤트 핸들러에 의해 해제된다.

'Developer > Tizen' 카테고리의 다른 글

ListView  (0) 2013.12.16
Tizen Application Package Manager  (0) 2013.12.15
Tizen Push Service  (0) 2013.12.06
타이젠 웹어플리케이션 기반에서 메뉴와 백버튼에 대한 처리  (0) 2013.12.06
Tizen Architecture  (0) 2013.12.05
Posted by No names
,