Подтвердить что ты не робот

Жизненный цикл апплета: какая практическая разница между init() и start() и destroy() и stop()?

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Прошло около 15 лет с тех пор, как я написал апплет, поэтому я мог бы неправильно запомнить.