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
Hinzu kommt, daß die früheste Benachrichtigung beim Startprozeß, die man erhalten kann, jetzt profile-after-change
ist. Dein Add-On wird keine
oder xpcom-startup
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.