2010-12-14 4 views
0

응용 프로그램이 완전히 닫힐 때 일부 응용 프로그램에서 생성 된 파일을 정리해야합니다. 닫기는 모든 화면에서 발생할 수 있습니다. 어떤 메소드 또는 어디에 응용 프로그램의 각 화면에서 onClose()를 오버라이드하지 않고 캡슐화 Menu Close 이벤트로 전역 오버라이드해야합니까?응용 프로그램이 어떤 화면에서 종료 될 때 알릴 수있는 방법

응용 프로그램의 중간에 메뉴 닫기를 사용하여 응용 프로그램을 닫으면 스택의 각 화면에 대해 onClose()가 호출되어 스택에서 튀어 나오거나 메모리에서 응용 프로그램이 제거됩니다.

답변

1

나는 당신이 원하는 것을 정확히 수행하는 방법이 있다고 생각하지 않지만, 당신이 원하는 행동을 취할 수 있다고 생각합니다. 첫째, 닫기 메뉴 항목을 수행 한 테스트를 기반으로 현재 화면의 onClose()를 호출하기 만하면됩니다. 기본 닫기 메뉴 항목은 전체 응용 프로그램을 닫지 않고 한 화면 만 닫습니다.

제가 생각할 수있는 가장 가까운 방법은 deactivate()입니다. 앱이 백그라운드로 전송 될 때 호출되지만 실제로 닫힐 때 호출되지 않습니다 (예 : 빨간색 '최종 통화'버튼을 누르면이 메소드가 호출됩니다. 메뉴에서 닫기를 누르면). 이것은 아마도 잔인한 행동 일지 몰라도, BlackBerry App Descriptor에서 "시작시 자동 실행"과 "BlackBerry 홈 화면에 프로그램 아이콘을 표시하지 않음"을 선택할 수 있습니다. 이렇게하면 앱이 사용자에게 보이지 않게되어 항상 배경에 있으며 홈 화면에 아이콘이 있고 UI를 표시 할 대체 엔트리 포인트를 만드는 GUI를 표시합니다. 그런 다음 사용자가 닫는 메뉴 항목을 선택하면 실제로 응용 프로그램을 백그라운드로 보내고 정리 코드를 deactivate()에 넣을 수 있습니다.

더 나은 방법은 부모 클래스의 onClose()를 재정의 한 다음 모든 화면을 해당 클래스에서 상속받는 것입니다. 거기에 정리 코드를 넣을 수 있습니다. 또는 닫기 메뉴 항목을 닫으려면 모든 화면을 makeMenu() 메서드보다 우선 적용하고 System.exit()을 호출하기 전에 적절한 정리 코드를 실행할 MenuItem을 추가하십시오.

0

내 응용 프로그램에서는 공통 상위 클래스에서 모든 화면을 상속받습니다. 그 부모 클래스에서 나는 표준 exit 처리를 구현한다.

화면이 튀어 올 때 실행되는 코드를 넣는 정확한 위치는 Screen.onUiEngineAttached(boolean)입니다. 이 메소드는 화면이 실제로 디스플레이 스택에서 푸시되거나 터지면 호출됩니다. 다른 방법은 메뉴 항목이나 더러운 화면 처리의 동작을 재정의하는 경우에만 관련이 있습니다.

또 다른 옵션은이 동작을 모두 처리하는 단일 수신기 개체를 사용하고 Screen.addScreenUiEngineAttachedListener()을 사용하여 디스플레이 스택에 밀어 넣기 전에 모든 화면에이를 구독하는 것입니다.

관련 문제