Жизненный цикл апплета: в чем практическая разница между init () и start () и destroy () & stop ()? - PullRequest
11 голосов
/ 07 сентября 2010

Учебное пособие javadoc и содержит информацию о четырех методах жизненного цикла апплета (init() -> start() -> stop() -> destroy()).Но они говорят в основном на абстрактном языке.

То, что я ищу, - это конкретные примеры, когда имеет значение, если я помещу свой код в init против start, и аналогично для destroy противstop.Единственное, что я до сих пор нашел, - это описание метода destroy в руководстве.В нем говорится:

Примечание. Сохраняйте реализации метода destroy как можно короче, поскольку нет гарантии, что этот метод будет полностью выполнен.Виртуальная машина Java может завершить работу до завершения метода длительного уничтожения.

(Я немного шокирован, что вышеприведенного нет в javadoc.)

Отредактируйте: , чтобы быть более конкретным: может ли кто-нибудь предоставить браузер + JVM, который при определенных действиях (переключение вкладок, нажатие кнопки «назад» и т. Д.) Вызывает stop, но не destroy (илиstart но не init)?

Ответы [ 2 ]

15 голосов
/ 07 сентября 2010

init и destroy вызываются, когда апплет загружен или выгружен, соответственно. Браузер может загружать и останавливать апплет, но не уничтожать его при навигации, переключении вкладок и т. Д.

start и stop предназначены для приостановки и возобновления апплета в вышеописанном случае (когда апплет становится или перестает отображаться на странице).

Я не знаю, поддерживает ли какой-либо браузер загруженный апплет, так что это может не иметь большого значения. Но, насколько я узнал, общее правило таково:

  • init должен подготовить апплет к запуску, но не запускать его. Апплет должен быть в "остановленном" состоянии после возврата из init. (Остановленный апплет должен использовать как можно меньше ресурсов, без использования ЦП.)
  • start должен запустить апплет (запуск потоков и т. Д.). Обычно он не читает параметры и не перезагружает изображения и все такое, как это должно быть сделано в init.
  • stop должен отменить то, что делает start, возвращая апплет в состояние «остановлено», но оставляя его в состоянии start снова. Он не должен отменять какую-либо работу init, так как это может привести к невозможности запуска апплета при правильном разделении функций.
  • destroy должен выполнить окончательную очистку перед выгрузкой апплета. Это в основном отменяет init. Это не должно останавливать апплет; это работа stop, и она должна быть выполнена до вызова destroy.
1 голос
/ 07 сентября 2010

В практическом плане, я думаю, что start() и stop() предназначались для вызова при каждом просмотре страницы, содержащей апплет (например, с помощью кнопок браузера «назад» и «вперед»), тогда как init() и destroy() были вызваны только один раз.

Прошло около 15 лет с тех пор, как я написал апплет, так что, возможно, я неправильно запомнил.

...