Sprache

Runtime.AddShutdownHook(Thread) Methode

Definition

Registriert einen neuen Abschaltungshaken des virtuellen Computers.

[Android.Runtime.Register("addShutdownHook", "(Ljava/lang/Thread;)V", "GetAddShutdownHook_Ljava_lang_Thread_Handler")]
public virtual void AddShutdownHook(Java.Lang.Thread? hook);
[<Android.Runtime.Register("addShutdownHook", "(Ljava/lang/Thread;)V", "GetAddShutdownHook_Ljava_lang_Thread_Handler")>]
abstract member AddShutdownHook : Java.Lang.Thread -> unit
override this.AddShutdownHook : Java.Lang.Thread -> unit

Parameter

hook
Thread

Ein initialisiertes, aber nicht gestartetes Thread Objekt

Attribute

Ausnahmen

wenn der Hook bereits gestartet wurde oder bereits registriert wurde.

wenn der virtuelle Computer bereits heruntergefahren wird.

Hinweise

Registriert einen neuen Abschaltungshaken des virtuellen Computers.

Der Java virtuellen Computer wird als Reaktion auf zwei Arten von Ereignissen heruntergefahren:

<Ul>

<li> Das Programm wird normal beendet , wenn der letzte Nicht-Daemon-Thread beendet wird oder wenn die #exit exit (gleichwertige) System#exit(int) System.exitMethode aufgerufen wird, oder

<li> Der virtuelle Computer wird als Reaktion auf einen Benutzerunterbruch beendet , z. B. eingaben ^Coder ein systemweites Ereignis, z. B. Benutzerabmeldung oder Systemschließung.

</ul>

Ein Herunterfahren-Hook ist einfach ein initialisierter, aber nicht gestarteter Thread. Wenn der virtuelle Computer seine Abschaltungssequenz beginnt, startet er alle registrierten Herunterfahren-Hooks in einer nicht angegebenen Reihenfolge und lässt sie gleichzeitig ausführen. Wenn alle Haken fertig sind, wird sie dann angehalten. Beachten Sie, dass Daemon-Threads während der Abschaltungssequenz weiterhin ausgeführt werden, ebenso wie Nicht-Daemon-Threads, wenn das Herunterfahren durch Aufrufen der #exit exit Methode initiiert wurde.

Sobald die Abschaltung begonnen hat, kann sie nur durch Aufrufen der #halt halt Methode beendet werden, die den virtuellen Computer beendet.

Nachdem die Abschaltungssequenz begonnen hat, ist es unmöglich, einen neuen Herunterfahren-Hook zu registrieren oder einen zuvor registrierten Hook zu deaktivieren. Wenn Sie eine dieser Vorgänge versuchen, wird ein IllegalStateException Fehler ausgelöst.

Das Herunterfahren von Hooks erfolgt zu einer heiklen Zeit im Lebenszyklus eines virtuellen Computers und sollte daher defensiv codiert werden. Sie sollten insbesondere so geschrieben werden, dass sie threadsicher sind und so weit wie möglich Deadlocks vermeiden. Sie sollten sich auch nicht blind auf Dienste verlassen, die möglicherweise ihre eigenen Herunterfahren-Hooks registriert haben und sich daher selbst im Zuge des Herunterfahrens selbst. Versuche, andere threadbasierte Dienste wie den AWT-Ereignisverteilerthread zu verwenden, können beispielsweise zu Deadlocks führen.

Auch Schließungshaken sollten ihre Arbeit schnell beenden. Wenn ein Programm die Erwartung aufruft #exit exit , wird der virtuelle Computer umgehend heruntergefahren und beendet. Wenn der virtuelle Computer aufgrund einer Benutzerabmeldung beendet wird oder das zugrunde liegende Betriebssystem heruntergefahren wird, kann das zugrunde liegende Betriebssystem nur einen festen Zeitraum zulassen, in dem heruntergefahren und beendet werden kann. Daher ist es nicht möglich, eine Benutzerinteraktion zu versuchen oder eine lange Laufende Berechnung in einem Herunterfahren-Hook durchzuführen.

Uncaught exceptions are handled in shutdown hooks just in any other thread, by invoking the ThreadGroup#uncaughtException uncaughtException method of the thread's ThreadGroup object. Die Standardimplementierung dieser Methode druckt die Stapelablaufverfolgung der Ausnahme in System#err den Thread und beendet ihn. Er bewirkt nicht, dass der virtuelle Computer beendet oder angehalten wird.

In seltenen Fällen kann der virtuelle Computer abgebrochen werden, d. h. beenden Sie die Ausführung, ohne sauber herunterzufahren. Dies tritt auf, wenn der virtuelle Computer extern beendet wird, z. B. mit dem SIGKILL Signal auf Unix oder dem TerminateProcess Aufruf von Microsoft Windows. Der virtuelle Computer kann auch abgebrochen werden, wenn eine systemeigene Methode z. B. interne Datenstrukturen beschädigt oder versucht, auf nicht vorhandene Arbeitsspeicher zuzugreifen. Wenn der virtuelle Computer abgebrochen wird, kann keine Garantie dafür bestehen, ob heruntergefahrene Hooks ausgeführt werden.

In 1.3 hinzugefügt.

Java Dokumentation für java.lang.Runtime.addShutdownHook(java.lang.Thread).

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Gilt für: