Applet生命周期:init()和amp;之间的实际区别是什么? start()和destroy()&停()?

时间:2010-09-07 18:50:17

标签: java applet lifecycle

javadoctutorial包含有关四个applet生命周期方法(init() -> start() -> stop() -> destroy())的信息。但他们大多用抽象语言说话。

我正在寻找的是具体的例子,说明如果我将代码放入init vs start,以及类似destroy vs stop 。到目前为止我唯一发现的是教程对destroy方法的描述。它说:

  

注意:保持实施   破坏方法尽可能短,   因为无法保证   这种方法将是完全的   执行。 Java虚拟机   可能会在长期毁灭之前退出   方法已经完成。

(我有点震惊,上面的内容不在javadoc中。)

编辑更具体:任何人都可以提供浏览器+ JVM组合,在某些特定操作(切换标签,点击“后退”按钮等)后,调用{{1但不是stop(或destroy而不是start)?

2 个答案:

答案 0 :(得分:15)

分别加载或卸载applet时,会调用

initdestroy。浏览器可以加载applet并停止它,但在导航,切换标签等时不会销毁它。

startstop用于暂停和恢复applet,在上面的情况下(当applet成为或不再出现在页面上时)。

我不知道是否有任何浏览器确实加载了applet,所以它可能并不重要。但据我所知,一般规则是:

  • init应该让applet准备好运行,但实际上并没有将其设置为运行状态。从init返回时,applet应处于“已停止”状态。 (停止的applet应该尽可能少地使用资源,而不使用CPU。)
  • start应该启动applet运行(启动线程等)。它通常不会读取参数并重新加载图像以及所有这些,因为这应该在init中完成。
  • stop应该撤消start所做的事情...将applet恢复到“已停止”状态,但让它再次能够start。它不应该撤消任何init的工作,因为如果功能正确分离,这将使applet无法启动。
  • destroy应该在卸载applet之前进行任何最终清理。它基本上撤消了init。它不应该停止applet;这是stop的工作,应该在调用destroy之前完成。

答案 1 :(得分:1)

实际上,我认为每次查看带有applet的页面时都会调用start()stop()(例如,使用浏览器的“后退”和“前进”按钮),init()destroy()只被调用一次。

我写了一个小程序已经有15年了,所以我可能会记错了。