1

GWT にはMyClass、いくつかのイベント ハンドラーを登録するクラスがあります。そのオブジェクト ( object1)がありますMyClass。特定の瞬間に、ファイナライズしてそのハンドラーのリッスンを停止させたいと考えています。その後、別のMyClassオブジェクト ( object2) を作成するためです。

どうやってやるの?私はすでに で試しましobject1 = nullたが、そのハンドラーは (少なくともしばらくの間) リッスンし続けます。

4

1 に答える 1

5

gc がハンドラーの破棄を回避できなかったため、ハンドラーがまだ存在している可能性があります。リスナーが存在し続けないことが重要な場合は、登録を解除する必要があります。

これを行う 1 つの方法は、HandlerRegistration の登録を解除することです。たとえば、addClickHandlerは登録解除可能なHandlerRegistrationを返します。これを行うタイミングと方法は、GUI クラスによって異なります。登録解除をファイナライズ メソッドに入れることもできますが、これらのメソッドは gc ともちろんこれが Java ではなく JavaScript であるため、非常に散発的に呼び出されることに気付くでしょう。そのため、GUI要素onDetachまたはonUnloadの detach または destroy メソッドにそれらを配置することを検討してください。

于 2012-11-14T12:30:49.033 に答える