프로그램 수명 주기 API

프로그램 수명 주기는 프로그램이 시작해서 종료할 때까지 이동할 수 있는 상태 및 전환을 나타냅니다. BlackBerry® 프로그램의 수명 주기는 시작, 실행, 종료의 세 가지로 구성되어 있어 간단합니다. 실행 상태인 동안 대부분의 프로그램은 이벤트를 받고 처리하며 이에 따라 UI를 업데이트합니다.

모든 프로그램에는 Application 또는 UiApplication 중 하나에서 파생된 프로그램 클래스가 있습니다. UI가 있는 프로그램을 생성하려면 해당 프로그램은 UiApplication을 확장해야 합니다. 그렇지 않은 경우, 프로그램은 Application을 확장해야 합니다.

시작

BlackBerry 프로그램은 다양한 방법으로 시작할 수 있습니다.

  • 사용자는 홈 스크린에서 아이콘을 클릭합니다.
  • 스마트폰이 시작되면 시스템은 프로그램을 자동으로 시작됩니다.
  • 다른 프로그램에서 해당 프로그램을 시작합니다.
  • 시스템은 일정 간격으로 프로그램을 시작합니다.

실행 중

프로그램 관리자는 프로그램 시작 방법과 관계없이 프로그램이 실행할 때 사용하는 프로세스를 시작하는 역할을 합니다. ApplicationManager 클래스는 프로그램이 프로그램 관리자와 상호 작용하여 다음의 작업을 수행할 수 있도록 합니다.

  • 프로그램을 즉시 또는 일정 간격으로 실행
  • 프로세스와의 상호 작용(포그라운드 프로그램에 대한 ID 검색 포함)
  • 시스템에 글로벌 이벤트 게시

프로그램 관리자는 새 프로세스를 가져오고 프로세스 내 스레드를 생성하여 프로그램 진입점 중 하나를 호출하여 프로그램을 시작합니다. 대부분의 프로그램의 경우, 이 프로그램 클래스의 main() 메소드는 호출되는 단일 진입점입니다. 그러나 프로그램에 대해 진입점을 두 개 이상 구성할 수 있습니다. 여러 개의 진입점은 사용자가 다양한 방법으로 프로그램을 시작하도록 합니다. 예를 들어, 프로그램이 사용자가 새 문서를 만들도록 허용한 경우 사용자에게 두 아이콘을 제공하고 클릭하도록 하여 프로그램을 시작할 수 있습니다. 사용자는 한 아이콘을 클릭하여 홈 스크린에서 프로그램을 열 수 있고 다른 아이콘을 클릭하여 새 문서를 만드는데 필요한 화면에서 프로그램을 열 수 있습니다.

프로그램 설명자는 프로그램에 대한 데이터 집합입니다. 단일 프로그램에는 관련 프로그램 설명자가 두 개 이상 있을 수 있습니다. 여러 개의 진입점을 가진 프로그램에는 각 진입점에 해당하는 프로그램 설명자가 있습니다. ApplicationDescriptor 클래스를 사용하여 프로그램 설명자로 작업할 수 있습니다.

BlackBerry 운영 환경은 멀티 스레드입니다. 이 환경에서는 여러 개의 프로그램을 동시에 실행할 수 있습니다. 여러 프로그램 및 실행 중인 백그라운드 스레드에 브로드캐스트 이벤트를 지원합니다.

이벤트 스레드는 이벤트를 처리하고 프로그램 UI를 업데이트하는 유일한 스레드이므로 완료하는데 실패하거나 시간이 오래 걸릴 수 있는 지침을 실행하려는 경우에는 사용하면 안 됩니다. 예를 들어, 네트워크 연결을 해야할 경우 다른 스레드를 생성하여 사용해야 합니다.

이벤트가 아닌 스레드에서 UI를 업데이트하려는 상황과 직면할 수 있습니다. 이 작업을 수행하려면 두 가지 방법이 있습니다.

  • 짧은 시간 내에 이벤트 잠금을 획득하여 UI에 액세스할 수 있는 백그라운드 스레드를 사용할 수 있습니다. 이 옵션은 UI 업데이트를 신속히 또는 긴급하게 수행해야 할 경우 유용합니다. 이 경우 필요한 UI 업데이트를 빠르게 완료한 후 잠금을 해제해야 합니다. 그렇지 않으면, 프로그램은 응답하지 않고 시스템에 의해 종료될 수 있습니다. 백그라운드 스레드에서 Application.getEventLock()을 호출하여 이벤트 잠금을 획득하고 이 객체를 동기화하여 UI에 대한 액세스를 직렬화합니다.

  • 이벤트 큐에 실행 가능 객체를 추가할 수 있습니다. 이 옵션은 작업이 실행되기 전에 지연이 발생해도 문제가 없는 경우 사용하는 것이 좋습니다. Runnable을 구현하는 객체 형식에 이벤트를 입력합니다. 이벤트는 메시지 큐에서 받았을 때 이벤트 스레드에 의해 처리됩니다. 이벤트 스레드는 run() 메소드를 호출하여 이벤트를 처리합니다. 프로그램의 메시지 큐에 실행 가능한 이벤트를 입력하려면 invokeAndWait() 메소드 또는 invokeLater() 메소드를 사용합니다.

어느 경우에나 완료하는데 시간이 오래 걸릴 수 있는 작업을 실행하지 않거나 차단해야 합니다. 작업 내에서 라이브러리 콜을 사용하는 경우 이를 잘 이해하여 빠르게 끝내고 차단하지 않는 경우에만 사용하도록 합니다.

종료

프로그램을 종료하는 한 가지 방법은BlackBerry JVM이 해당 호출자의 모든 프로세스와 최종적으로는 모든 관련 스레드를 종료시키도록 하는 System.exit()를 호출하는 것입니다. 또는, System.exit() 메소드가 close()로 호출하도록 하는 마지막 화면을 디스플레이 스택에서 제거하여 프로그램을 종료할 수 있습니다.

프로그램을 종료하기 전에 등록된 모든 수신기를 수동으로 등록 취소하는 것이 좋습니다.

대부분의 경우, 종료하지 않는 Application.enterEventDispatcher()을 호출하여 이벤트 디스패처 스레드를 시작하므로 프로그램은 종료하는 방법을 제공해야 합니다. 사용자와 상호 작용하는 프로그램은 Close 메뉴 항목의 핸들러를 제공할 수 있고 사용자와 상호 작용하지 않는 프로그램은 존재 이유를 나타내는 일부 시스템 이벤트 처리 시 종료할 수 있습니다.

프로그램 수명 주기에 대한 자세한 정보

다음 주제: UI API
이전 주제: Java SDK 소개

이 정보가 도움이 되었습니까? 의견을 보내 주십시오.