javadoc和tutorial包含有关四个applet生命周期方法(init() -> start() -> stop() -> destroy()
)的信息。但他们大多用抽象语言说话。
我正在寻找的是具体的例子,说明如果我将代码放入init
vs start
,以及类似destroy
vs stop
。到目前为止我唯一发现的是教程对destroy
方法的描述。它说:
注意:保持实施 破坏方法尽可能短, 因为无法保证 这种方法将是完全的 执行。 Java虚拟机 可能会在长期毁灭之前退出 方法已经完成。
(我有点震惊,上面的内容不在javadoc中。)
编辑更具体:任何人都可以提供浏览器+ JVM组合,在某些特定操作(切换标签,点击“后退”按钮等)后,调用{{1但不是stop
(或destroy
而不是start
)?
答案 0 :(得分:15)
init
和destroy
。浏览器可以加载applet并停止它,但在导航,切换标签等时不会销毁它。
start
和stop
用于暂停和恢复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年了,所以我可能会记错了。