Applet生命周期:init()和start()以及destroy()和stop()之间的实际区别是什么?
javadoc和tutorial有关于四个applet生命周期方法的信息( init() -> start() -> stop() -> destroy()
)。 但他们大多用抽象语言交谈。
我正在寻找的是具体的例子,如果我把我的代码放在init
vs start
,并且类似于destroy
vs stop
,它会有什么不同。 到目前为止我唯一发现的是教程对destroy
方法的描述。 它说:
注意:尽可能缩短destroy方法的实现,因为无法保证此方法将完全执行。 Java虚拟机可能会在长破坏方法完成之前退出。
(我有点震惊,上面的内容不在javadoc中。)
编辑:更具体一点:任何人都可以提供浏览器+ JVM组合,在某些特定操作(切换选项卡,点击“后退”按钮等)后,调用stop
但不destroy
(或start
但不init
)?
分别在加载或卸载applet时调用init
和destroy
。 浏览器可以加载applet并停止它,但不能销毁它,导航时,切换标签等。
start
和stop
是用于暂停和恢复applet,在上面的情况下(当applet变为或不再显示在页面上时)。
我不知道是否有任何浏览器确实加载了applet,所以它可能并不重要。 但据我所知,一般规则是:
-
init
应该让applet准备好运行,但实际上并没有将它设置为运动。 从init
返回时,applet应处于“已停止”状态。 (停止的applet应该尽可能少地使用资源,并且没有CPU。) -
start
应该启动applet运行(启动线程等)。 它通常不会读取params并重新加载图像以及所有这些,因为这应该在init
完成。 -
stop
应该撤消start
做什么…将applet返回到“已停止”状态,但让它能够重新start
。 它不应该撤消任何init
的工作,因为如果function正确分离,这将使applet不可启动。 - 在卸载applet之前,
destroy
应该进行任何最终的清理。 它基本上撤消了init
。 它不应该停止applet; 那是stop
的工作,应该在调用destroy
之前完成。
实际上,我认为每次查看带有applet的页面时都会调用start()
和stop()
(例如,使用浏览器的“后退”和“前进”按钮),而init()
和destroy()
只被调用一次。
我写了一个小程序已经有15年了,所以我可能会记错。