Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Empfang von Benachrichtigungen zum Startprozeß

Dieser Artikel benötigt eine redaktionelle Überprüfung. So können Sie helfen.

Manchmal brauchen XPCOM Komponenten Benachrichtigungen über den Fortschritt beim Hochfahren der Anwendung, zum Beispiel um neue Dienste zur passenden Zeit starten können

Empfang von Benachrichtigungen zum Startprozeß ab Gecko 2.0 (Firefox 4)

Der XPCOM Startprozeß wurde verändert um die zum Hochfahren benötigte Zeit zu verbessern. Siehe Der Startprozeß für Details über die Funktionsweise, wenn dich die Einzelheitne interessieren.

Die entscheidende Änderung ist, daß man jetzt entsprechende Zeilen zum chrome.manifest hinzufügt damit die Anwendung sich darum kümmert, anstelle die Registrierung programmatisch mit dem Category Manager durchzuführen wie früher. Zum Beispiel:

category profile-after-change MyComponent @foobar/mycomponent;1
Wichtig: Bisher begann die Contract ID des Kategorie-EIntrags mit "service," wenn die Komponente als Dienst (Service) implementiert war. Das ist nicht länger der Fall, dieses muß bei der Codemigration entfernt werden..

Hinzu kommt, daß die früheste Benachrichtigung beim Startprozeß, die man erhalten kann, jetzt  profile-after-change ist. Dein Add-On wird keine xpcom-startup oder app-startup Benachrichtigungen mehr erhalten.

Der Startprozeß

Während des Startprozesses wird aus dem Manifest der Anwendung die Liste der Komponenten ausgelesen, die registriert werden müssen, und diese Komponenten werden dann gestartet. Damit sind dann XPCOM und die Anwendung soweit hochgefahren, daß der Erweiterungs-Manager geladen werden kann, um sich um Installation, Deinstallation und Aktualisierung von Erweiterungen zu kümmern.

Sobald dieser Prozess abgeschlossen ist, können Erweiterungen einfach dadurch geladen werden, daß ihr Manifest gelesen, ihre Komponenten geladen und der Anwendungsstart fortgesetzt wird, ohne den Browser neu starten zu müssen.

Empfang von Benachrichtigungen zum Startprozeß vor Gecko 2.0 (Firefox 4)

Um Benachrichtigungen zum Startprozeß zu empfangen muß man nsICategoryManager benutzen um sich für die "app-startup" Kategorie zu registrieren. Damit wird die Komponente dann unter anderem folgende Benachrichtigungen zum Anwendungsstart erhalten:

xpcom-startup
Wird gesendet, wenn XPCOM fertig mit dem Hochfahren ist. Die meisten Anwendungsdienste sind dann noch nicht verfügbar, aber XPCOM selbst steht bereit.
app-startup
Wird gesendet, wenn die Anwendung mit dem Startprozess fertig ist.
final-ui-startup
Wird gesendet eben bevor das erste Anwendungsfenster dargestellt wird.

Registrierung am Kategorien-Manager

Um sich beim Kategorien-Manager anzumelden, muß man nur dessen Methode nsICategoryManager.AddCategoryEntry() aufrufen:

categoryManager->AddCategoryEntry(APPSTARTUP_CATEGORY,
                                  "mycomponentname",
                                  "contract-id",
                                  PR_TRUE, PR_TRUE,
                                  getter_Copies(previous));

Das bewirkt, daß die Komponente mit nsIComponentManager.createInstance() instanziiert wird.

Wenn die Komponente als Dienst (Service) laufen soll, laß die Contract ID mit "service," beginnen:

categoryManager->AddCategoryEntry(APPSTARTUP_CATEGORY,
                                  "mycomponentname",
                                  "service,contract-id",
                                  PR_TRUE, PR_TRUE,
                                  getter_Copies(previous));

Wenn "service," angegeben ist, wird die Komponente mit nsIComponentManager.getService() instanziiert.

In beiden Fällen braucht man keine weitere Registrierung für die Benachrichtigungen zum Startprozeß, die Registrierung am Kategorien-Manager reicht dazu aus.

Wie es weitergeht

Nachdem die Registrierung am Kategorien-Manager erfolgt ist, wird zum Zeitpunkt des Starts von Mozilla (oder wenn bei einer eingebetteten Anwendung die Funktion NS_InitEmbedding() aufgerufen wurde) die AppStartupNotifier Komponente instanziiert und ihre Observe() Methode aufgerufen; Diese wiederum läuft über alle Komponenten in der app-startup Kategorie und sendet ihnen die passenden Benachrichtigungen.

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

 Mitwirkende an dieser Seite: asgalon
 Zuletzt aktualisiert von: asgalon,