GWT にはMyClass
、いくつかのイベント ハンドラーを登録するクラスがあります。そのオブジェクト ( object1
)がありますMyClass
。特定の瞬間に、ファイナライズしてそのハンドラーのリッスンを停止させたいと考えています。その後、別のMyClass
オブジェクト ( object2
) を作成するためです。
どうやってやるの?私はすでに で試しましobject1 = null
たが、そのハンドラーは (少なくともしばらくの間) リッスンし続けます。
GWT にはMyClass
、いくつかのイベント ハンドラーを登録するクラスがあります。そのオブジェクト ( object1
)がありますMyClass
。特定の瞬間に、ファイナライズしてそのハンドラーのリッスンを停止させたいと考えています。その後、別のMyClass
オブジェクト ( object2
) を作成するためです。
どうやってやるの?私はすでに で試しましobject1 = null
たが、そのハンドラーは (少なくともしばらくの間) リッスンし続けます。
gc がハンドラーの破棄を回避できなかったため、ハンドラーがまだ存在している可能性があります。リスナーが存在し続けないことが重要な場合は、登録を解除する必要があります。
これを行う 1 つの方法は、HandlerRegistration の登録を解除することです。たとえば、addClickHandlerは登録解除可能なHandlerRegistrationを返します。これを行うタイミングと方法は、GUI クラスによって異なります。登録解除をファイナライズ メソッドに入れることもできますが、これらのメソッドは gc ともちろんこれが Java ではなく JavaScript であるため、非常に散発的に呼び出されることに気付くでしょう。そのため、GUI要素onDetachまたはonUnloadの detach または destroy メソッドにそれらを配置することを検討してください。