Containeröffner

öffentliche Klasse ContainerOpener

Hilfsklasse zum Öffnen von Containern.

Dies ist ein Wrapper für die openContainer(String, Container.Callback)-Methode für Nutzer, die nicht die detaillierte Kontrolle benötigen, die sie bietet.

Ein Container kann sich in drei verschiedenen Status befinden:

  • Standardeinstellung: Dies ist der Container, der mit der Anwendung ausgeliefert wird (entweder ein Binärcontainer oder eine JSON-Datei, die in einen Container konvertiert wird).
  • Veraltet: ein Container, der vor Kurzem vom Server heruntergeladen wurde.
  • Aktuell: Ein Container, der kürzlich vom Server heruntergeladen wurde.

Im Folgenden finden Sie ein Beispiel, bei dem der Aufrufer bis zu 100 Millisekunden warten möchte, um den nicht standardmäßigen Container abzurufen (bei einer Zeitüberschreitung wird der Standardcontainer abgerufen).

   ContainerFuture future =
       ContainerOpener.openContainer(tagManager, containerId, OpenType.PREFER_NON_DEFAULT, 100);
   Container container = future.get();
 

Wenn der Aufrufer asynchron benachrichtigt werden möchte, wenn der Container verfügbar ist, aber das Zeitlimit manuell auf 0,5 Sekunden festlegen möchte, sollte der Aufrufer eine abgeleitete Klasse von ContainerOpener.Notifier erstellen. Verwendungsbeispiel:

   ContainerOpener.openContainer(tagManager, containerId, OpenType.PREFER_NON_DEFAULT,
       500, new ContainerOpener.Notifier() {
         @Override
         void containerAvailable(Container container) {
           // Code to handle the container available notification and save the container.
         }
       });
 

Zusammenfassung für geschachtelte Klassen

Oberfläche ContainerOpener.ContainerFuture Ein Objekt, das einen Container zurückgibt. 
Oberfläche ContainerOpener.Notifier Objekt, das eine Benachrichtigung erhält, wenn ein Container zur Verwendung verfügbar ist. 
enum ContainerOpener.OpenType Einstellungen zum Öffnen eines Containers. 

Constant Summary

long DEFAULT_TIMEOUT_IN_MILLIS Das Standardzeitlimit in Millisekunden für die Anfrage des Containers.

Public Method Summary

statisches ContainerOpener.ContainerFuture
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis)
Static void
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis, ContainerOpener.Notifier Notifier)

Konstanten

public static final long DEFAULT_TIMEOUT_IN_MILLIS

Das Standardzeitlimit in Millisekunden für die Anfrage des Containers.

Konstanter Wert: 2.000

Public Methods

public static ContainerOpener.ContainerFuture openContainer (TagManager tagManager, String containerId, ContainerOpener.OpenType, openType{/14) openType{/14)

Wartet bis zu timeoutInMillis-mal, bis ein Container geladen wird (je nach angegebenem openType nicht der Standard- oder die aktuelle Version).

Wenn der geöffnete Typ PREFER_NON_DEFAULT ist, wird ein nicht standardmäßiger (gespeicherter oder aus dem Netzwerk abgerufener) Container geladen und die Blockierung von ContainerFuture wird aufgehoben, sobald einer der folgenden Fälle eintritt:

  • ein gespeicherter Container geladen wird.
  • Wenn kein gespeicherter Container vorhanden ist, wird ein Netzwerkcontainer geladen oder ein Netzwerkfehler tritt auf.
  • der Timer abläuft.

Wenn ein Netzwerkfehler auftritt oder der Timer abläuft, gibt get() möglicherweise einen Standardcontainer zurück.

Wenn der geöffnete Typ PREFER_FRESH ist, wird ein neuer (gespeicherter oder aus dem Netzwerk abgerufener) Container geladen und ContainerFuture wird nicht mehr blockiert, sobald einer der folgenden Schritte eintritt:

  • wird ein neuer Container geladen.
  • Wenn kein gespeicherter Container vorhanden ist oder der gespeicherte Container veraltet ist, wird ein Netzwerkcontainer geladen oder ein Netzwerkfehler tritt auf.
  • der Timer abläuft.

Wenn ein Netzwerkfehler auftritt oder der Timer abläuft, gibt get() möglicherweise einen Standardcontainer oder einen gespeicherten, veralteten Container zurück.

Wenn Sie openContainer ein zweites Mal mit einem bestimmten containerId aufrufen, wird eine ContainerFuture zurückgegeben, deren get() denselben Container wie beim ersten Aufruf zurückgibt.

Parameter
tagManager das TagManager, für das „openContainer“ aufgerufen werden soll
containerId ID des zu ladenden Containers
openType die Wahl, wie der Container geöffnet werden soll
timeoutInMillis Maximale Wartezeit in Millisekunden für das Laden des Containers (aus dem gespeicherten Speicher). Wenn null ist, wird DEFAULT_TIMEOUT_IN_MILLIS verwendet.
Rückgaben
  • Ein Objekt, dessen get-Methode den Container zurückgibt, aber es kann bis zu ZeitüberschreitungInMillis blockieren, bis der Container verfügbar ist.

public static void openContainer (TagManager tagManager, String tagManager, ContainerOpener.OpenType tagManager tagManager, Long tagManager, Long Open1out15Millis}ContainerOpener.Notifier

Wartet bis zu timeoutInMillis-mal, bis ein Container geladen wird (je nach angegebenem openType nicht der Standard- oder die aktuelle Version).

Wenn der geöffnete Container PREFER_NON_DEFAULT ist, wird ein nicht standardmäßiger (gespeicherter oder aus dem Netzwerk abgerufener) Container geladen und an den Notifier übergeben. Der Notifier wird aufgerufen, sobald einer der folgenden Fälle eintritt:

  • ein gespeicherter Container geladen wird.
  • Wenn kein gespeicherter Container vorhanden ist, wird ein Netzwerkcontainer geladen oder ein Netzwerkfehler tritt auf.
  • der Timer abläuft.

Wenn ein Netzwerkfehler auftritt oder der Timer abläuft, ist der an containerAvailable(Container) übergebene Container ein Standardcontainer.

Wenn der geöffnete Container PREFER_FRESH ist, wird ein neuer (gespeicherter oder aus dem Netzwerk abgerufener) Container geladen und an den Notifier übergeben. Der Notifier wird aufgerufen, sobald einer der folgenden Fälle eintritt:

  • wird ein neuer Container geladen.
  • Wenn kein gespeicherter Container vorhanden ist oder der gespeicherte Container veraltet ist, wird ein Netzwerkcontainer geladen oder ein Netzwerkfehler tritt auf.
  • der Timer abläuft.

Wenn ein Netzwerkfehler auftritt oder der Timer abläuft, kann der an containerAvailable(Container) übergebene Container ein standardmäßiger oder veralteter gespeicherter Container sein.

Wenn Sie openContainer(TagManager, String, ContainerOpener.OpenType, Long) ein zweites Mal mit einem bestimmten containerId aufrufen, wird derselbe Container, der vom vorherigen Aufruf zurückgegeben wurde, an den Notifier übergeben, sobald er verfügbar ist.

Parameter
tagManager das TagManager, für das „openContainer“ aufgerufen werden soll
containerId ID des zu ladenden Containers
openType die Wahl, wie der Container geöffnet werden soll
timeoutInMillis Maximale Wartezeit in Millisekunden für das Laden des Containers (aus dem gespeicherten Speicher und/oder Netzwerk). Wenn null ist, wird DEFAULT_TIMEOUT_IN_MILLIS verwendet.
Notifier einen Notifier, der aufgerufen wird, wenn der Container verfügbar ist. Sie wird mit dem gespeicherten oder Netzwerkcontainer aufgerufen, falls verfügbar, und vor dem Zeitlimit geladen. Andernfalls wird er mit dem Standardcontainer aufgerufen. Der Notifier kann von einem anderen Thread aufgerufen werden.