2010-09-07 8 views
11

The javadoc i tutorial mają informacje o czterech metodach cyklu życia apletu (init() -> start() -> stop() -> destroy()). Ale rozmawiają głównie w abstrakcyjnym języku.Cykl życia Applet: jaka jest praktyczna różnica między init() i start() i destroy() i stop()?

Jakie szukam są konkretne przykłady, gdy to robi różnicę jeśli kładę kod w init vs start i podobnie dla destroy vs stop. Jedyne, co znalazłem do tej pory, to opis tutoriala metody destroy. Mówi:

Uwaga: Przechowywać implementacje zniszczyć sposób możliwie jak najkrótszy, ponieważ nie ma gwarancji, że metoda ta będzie całkowicie wykonywany. Maszyna wirtualna Java może zostać zakończona przed zakończeniem długiego niszczenia metody .

(jestem trochę w szoku, że powyższe nie jest w javadoc.)

Edit: być bardziej szczegółowe: Czy ktoś może dostarczyć przeglądarki + JVM combo, że na niektóre specyficzne akcja (przełączanie kart, naciśnięcie przycisku "wstecz" itd.), wywołuje stop, ale nie destroy (lub start, ale nie init)?

Odpowiedz

15

init i destroy są wywoływane, gdy aplet jest ładowany lub rozładowywany, odpowiednio. Jest możliwe, że przeglądarka załadowanie apletu i zatrzymać ją, ale nie zniszczy jej, kiedy przechodząc wokół przełączania zakładek itp

start i stop są do wstrzymywania i wznawiania apletu, w powyższym przypadku (gdy aplet staje się lub przestaje być widoczne na stronie).

Nie wiem, czy jakakolwiek przeglądarka rzeczywiście zachowuje aplet załadowany, więc może nie mieć znaczenia. Ale o ile ja nauczyłem go, ogólna zasada:

  • init powinien dostać aplet gotowy do uruchomienia, ale nie faktycznie ustawić go w ruchu. Aplet powinien być w stanie "zatrzymanym" po powrocie z init. (Zatrzymany aplet powinien wykorzystywać tak mało zasobów, jak to tylko możliwe, a nie CPU).
  • start powinien uruchomić aplet uruchomiony (wątki startowe itp.). Zwykle nie będzie czytał params i przeładowywał obrazów i tak dalej, jak to powinno być zrobione w init.
  • powinien cofnąć to, co start robi ... przywracając aplet do stanu "zatrzymany", ale pozostawiając go ponownie w stanie start. Nie powinno to powodować cofania żadnej z prac init, ponieważ pozostawiłoby to aplet nieprzenośny, gdyby funkcja była poprawnie oddzielona.
  • destroy powinien wykonać ostateczne oczyszczenie przed wyjęciem apletu. Zasadniczo cofa init. Nie powinno zatrzymywać apletu; to jest zadanie stop i powinno już być zrobione przed wywołaniem destroy.
+2

Zrobiłem kilka eksperymentów w IE, firefox i safari, i nie byłem w stanie znaleźć przypadku, w którym stop został wezwany bez wywoływania zniszczenia. Więc jesteś "może nie ma znaczenia" komentarz wydaje się być tuż. –

1

Z praktycznego punktu widzenia, myślę, że start() i stop() miały być wywoływana za każdym razem, gdy strona aplet-łożysko było oglądane (na przykład za pomocą „do przodu” przyciski „wstecz” w przeglądarce i), natomiast init() i destroy() były tylko raz.

Minęło około 15 lat, odkąd napisałem aplet, więc mógłbym źle pamiętać.