Какой метод переопределить, чтобы знать, когда приложение выходит из любого экрана - PullRequest
0 голосов
/ 14 декабря 2010

Я должен выполнить очистку некоторых файлов, сгенерированных приложением, когда приложение полностью закрыто. Закрытие может происходить с любого экрана. Какой метод или где я должен переопределить глобально к будущему событию закрытия меню, а не переопределить onClose () на каждом экране приложения?

А когда приложение закрывается с помощью Menu Close в середине приложения, вызывается ли onClose () для каждого экрана в стеке и выгружается из стека, или оно просто удаляет приложение из памяти?

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Я не верю, что есть метод, который делает именно то, что вы хотите, но я думаю, что вы можете получить поведение, которое вы хотите. Во-первых, основываясь на тестировании, которое я сделал, пункт меню закрытия просто вызывает onClose () для текущего экрана. Элемент меню закрытия по умолчанию не закрывает все приложение, он просто закрывает один экран.

Ближайший метод, который я могу вспомнить, это deactivate () , он вызывается, когда приложение отправляется в фоновый режим, а не когда оно фактически закрыто (т.е. этот метод будет вызываться, если вы нажмете красный кнопка "завершение вызова", но не при нажатии кнопки закрытия в меню). Это, вероятно, было бы излишним, но вы могли бы выбрать «Автоматический запуск при запуске» и «Не отображать значок приложения на главном экране BlackBerry» в дескрипторе приложения BlackBerry. Это сделало бы приложение невидимым для пользователя, чтобы оно всегда было в фоновом режиме, чтобы на домашнем экране была иконка и отображался графический интерфейс пользователя, вы бы создали альтернативную точку входа, которая будет вызывать пользовательский интерфейс. Затем, когда пользователь выбирает пункт меню «Закрыть», все, что он на самом деле делает, это отправляет приложение в фоновый режим, и вы можете поместить свой код очистки в deactivate ().

Гораздо лучшим подходом было бы просто переопределить onClose () в родительском классе и затем сделать так, чтобы все ваши экраны наследовали от этого класса. Вы можете поместить свой код очистки там. Или, если вы хотите, чтобы пункт меню закрытия закрывал все экраны, переопределите метод makeMenu () и добавьте MenuItem , который выполнит соответствующий код очистки перед вызовом System.exit ().

0 голосов
/ 23 декабря 2010

В моем приложении все экраны наследуются от общего родительского класса. В этом родительском классе я реализую свою стандартную обработку выхода.

Правильное место для кода, который запускается при нажатии на экран: Screen.onUiEngineAttached (логическое значение) . Этот метод вызывается, когда экран фактически выталкивается или выталкивается из стека дисплея. Другие методы применимы только в том случае, если вы переопределяете поведение пунктов меню или некорректную обработку экрана.

Другой вариант - иметь один объект-слушатель, который обрабатывает все это поведение, и использовать Screen.addScreenUiEngineAttachedListener () , чтобы подписать его на все экраны, прежде чем помещать их в стек отображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...