问题 Applet生命周期:init()和start()以及destroy()和stop()之间的实际区别是什么?


的javadoc 和 教程 有关于四个applet生命周期方法的信息(init() -> start() -> stop() -> destroy())。但他们大多用抽象语言交谈。

我正在寻找的是具体的例子,说明如果我将代码放入其中会产生影响 init VS start,同样如此 destroy VS stop。到目前为止,我发现的唯一一件事是在教程的描述中 destroy 方法。它说:

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

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

编辑: 更具体一点:任何人都可以提供一个浏览器+ JVM组合,通过一些特定的操作(切换选项卡,点击“后退”按钮等),调用 stop 但不是 destroy (要么 start 但不是 init)?


11319
2017-09-07 18:50


起源



答案:


init 和 destroy 分别在加载或卸载applet时调用。浏览器可以加载applet并停止它,但不能销毁它,导航时,切换标签等。

start 和 stop 用于暂停和恢复applet,在上面的情况下(当applet变为或不再显示在页面上时)。

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

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

15
2017-09-07 19:03



我在IE,firefox和safari中做了一些实验,并且无法在没有调用destroy的情况下找到调用stop的情况。所以你说“它可能并不重要”评论似乎正确。 - Matt McHenry


答案:


init 和 destroy 分别在加载或卸载applet时调用。浏览器可以加载applet并停止它,但不能销毁它,导航时,切换标签等。

start 和 stop 用于暂停和恢复applet,在上面的情况下(当applet变为或不再显示在页面上时)。

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

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

15
2017-09-07 19:03



我在IE,firefox和safari中做了一些实验,并且无法在没有调用destroy的情况下找到调用stop的情况。所以你说“它可能并不重要”评论似乎正确。 - Matt McHenry


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

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


1
2017-09-07 18:57