【问题标题】:Applet lifecycle: what's the practical difference between init() & start(), and destroy() & stop()?Applet 生命周期:init() 和 start() 以及 destroy() 和 stop() 之间的实际区别是什么?
【发布时间】:2010-09-07 18:50:17
【问题描述】:

javadoctutorial 包含有关四种小程序生命周期方法 (init() -> start() -> stop() -> destroy()) 的信息。但他们大多用抽象语言交谈。

我正在寻找的是具体示例,说明如果我将我的代码放在 initstart 中,以及 destroystop 中的区别。到目前为止,我发现的唯一内容是教程对destroy 方法的描述。它说:

注意:保留 尽可能短的销毁方法, 因为不能保证 这种方法将完全 执行。 Java 虚拟机 可能会在长时间的破坏之前退出 方法已完成。

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

编辑: 更具体一点:任何人都可以提供浏览器 + JVM 组合,在某些特定操作(切换选项卡、点击“返回”按钮等)时调用 stop但不是destroy(或start 但不是init)?

【问题讨论】:

    标签: java applet lifecycle


    【解决方案1】:

    initdestroy 分别在加载或卸载小程序时调用。在浏览、切换标签等时,浏览器可以加载并停止小程序,但不会破坏它。

    startstop 用于暂停和恢复小程序,在上述情况下(当小程序在页面上显示或停止显示时)。

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

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

    【讨论】:

    • 我在 IE、firefox 和 safari 中进行了一些实验,但无法找到调用 stop 而没有调用 destroy 的情况。因此,您的“可能无关紧要”的评论似乎是正确的。
    【解决方案2】:

    实际上,我认为start()stop() 旨在在每次查看带有小程序的页面时调用(例如,使用浏览器的“后退”和“前进”按钮),而@ 987654323@ 和 destroy() 只被调用了一次。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 2015-07-11
      • 1970-01-01
      • 2023-03-08
      • 2021-06-12
      • 1970-01-01
      • 2017-12-18
      相关资源
      最近更新 更多