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

Mat*_*nry 11 java lifecycle applet

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

我正在寻找的是具体的例子,如果我把我的代码放在initvs中start,并且同样对于destroyvs ,它会有所不同stop.到目前为止我唯一发现的是教程对destroy方法的描述.它说:

注意:尽可能缩短destroy方法的实现,因为无法保证此方法将完全执行.Java虚拟机可能会在长破坏方法完成之前退出.

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

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

cHa*_*Hao 15

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调用之前完成.

  • 我在IE,firefox和safari中做了一些实验,并且无法在没有调用destroy的情况下找到调用stop的情况.所以你说"它可能并不重要"评论似乎正确. (2认同)