Otwieranie kontenera

klasa publiczna ContainerOpener

Klasa pomocnicza do otwierania kontenerów.

To jest kod wokół usługi openContainer(String, Container.Callback) w przypadku użytkowników, którzy nie potrzebują szczegółowej kontroli, jaką zapewnia.

Kontener może mieć 3 stany:

  • Domyślnie: jest to kontener wysyłany z aplikacją (plik binarny w kontenerze lub pliku json, który jest konwertowany na kontener).
  • Nieaktualny: kontener, który został pobrany z serwera, ale nie niedawno.
  • Świeży: kontener pobrany niedawno z serwera.

W tym przykładzie dzwoniący chce poczekać do 100 milisekund, aby otrzymać kontener inny niż domyślny (pobieram kontener domyślny po przekroczeniu limitu czasu).

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

Jeśli element wywołujący chce być asynchronicznie powiadamiany o dostępności kontenera, ale chce ręcznie określ limit czasu na 0,5 sekundy, element wywołujący powinien podklasę ContainerOpener.Notifier Przykładowe zastosowanie:

   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.
         }
       });
 

Podsumowanie zajęć zagnieżdżonych

interfejs, ContainerOpener.ContainerFuture Obiekt, który zwróci kontener.
interfejs, ContainerOpener.Notifier Obiekt, który otrzyma powiadomienie, gdy kontener będzie dostępny.
enum | typ wyliczeniowy ContainerOpener.OpenType Preferencje dotyczące otwierania kontenera.

Stałe podsumowanie

Liczba długa DEFAULT_TIMEOUT_IN_MILLIS Domyślny limit czasu żądania kontenera (w milisekundach).

Podsumowanie metody publicznej

statyczny ContainerOpener.ContainerFuture
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Długi timeoutInMillis)
statyczny nieważne
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis, ContainerOpener.Notifier powiadomienie)

Stałe

publiczne statyczny finał długość geograficzna . DEFAULT_TIMEOUT_IN_MILLIS

Domyślny limit czasu żądania kontenera (w milisekundach).

Wartość stała: 2000 r.

Metody publiczne

publiczne statyczny ContainerOpener.ContainerFuture openContainer (TagManager tagManager, Ciąg containerId, ContainerOpener.OpenType openType, Long timeoutInMillis)

Ładowanie kontenera (niedomyślne lub aktualne) może zająć maksymalnie timeoutInMillis raz w zależności od określonej wartości openType).

Jeśli otwarty jest typ PREFER_NON_DEFAULT, wartość inna niż domyślna (zapisana lub pobrana z sieci), a kontener ContainerFuture zostanie odblokowany, zachodzi jedna z tych sytuacji:

  • i zapisany kontener został załadowany.
  • jeśli nie ma zapisanego kontenera, oznacza to, że został załadowany kontener sieci lub wystąpi błąd sieci.
  • nie odlicza czasu.

Jeśli wystąpi błąd sieci lub licznik czasu wygaśnie, get() może wrócić domyślny kontener.

Jeśli otwarty jest typ PREFER_FRESH, nowy (zapisany lub pobrany z sieci), a kontener ContainerFuture zostanie odblokowany, zachodzi jedna z tych sytuacji:

  • zapisany świeży kontener.
  • jeśli nie ma zapisanego kontenera lub zapisany kontener jest nieaktualny, kontener sieciowy został załadowany lub wystąpił błąd sieci.
  • nie odlicza czasu.

Jeśli wystąpi błąd sieci lub licznik czasu wygaśnie, get() może wrócić domyślny lub zapisany nieaktualny kontener.

Jeśli ponownie zadzwonisz do użytkownika openContainer z danym containerId, zostanie zwrócony ContainerFuture, którego wartość get() zwróci ten sam kontener co pierwsze wywołanie.

Parametry
tagManager TagManager, na którym należy wywołać openContainer
containerId identyfikator kontenera do wczytania
openType wybór sposobu otwierania kontenera
timeoutInMillis to maksymalny czas oczekiwania na wczytanie kontenera w milisekundach (od zapisany sklep). Jeśli wartość to null, zostanie użyta wartość DEFAULT_TIMEOUT_IN_MILLIS.
Zwroty
  • obiektu, którego metoda get zwróci kontener, ale może zablokować do timeInMillis zostaje udostępnione do czasu udostępnienia kontenera.

publiczne statyczny nieważne . openContainer (TagManager tagManager, Ciąg tagManager, ContainerOpener.OpenType tagManager, Długi tagManager, notif1}, ContainerOpener.Notifier

Ładowanie kontenera (niedomyślne lub aktualne) może zająć maksymalnie timeoutInMillis raz w zależności od określonej wartości openType).

Jeśli otwarty jest typ PREFER_NON_DEFAULT, wartość inna niż domyślna (zapisana lub pobrana z sieci) jest wczytywany i przekazywany do powiadomienia. Powiadamianie jest wywoływane, gdy tylko zachodzi jedna z tych sytuacji:

  • i zapisany kontener został załadowany.
  • jeśli nie ma zapisanego kontenera, oznacza to, że został załadowany kontener sieci lub wystąpi błąd sieci.
  • nie odlicza czasu.

Jeśli wystąpi błąd sieci lub licznik czasu wygaśnie, kontener jest przekazywany do containerAvailable(Container) to kontener domyślny.

Jeśli otwarty jest typ PREFER_FRESH, nowy (zapisany lub pobrany z sieci) jest wczytywany i przekazywany do powiadomienia. Powiadamianie jest wywoływane, gdy tylko zachodzi jedna z tych sytuacji:

  • zapisany świeży kontener.
  • jeśli nie ma zapisanego kontenera lub zapisany kontener jest nieaktualny, zostanie wczytany kontener sieciowy lub wystąpi błąd sieci.
  • po upływie określonego czasu.

Jeśli wystąpi błąd sieci lub licznik czasu wygaśnie, kontener jest przekazywany do containerAvailable(Container) może być domyślnym lub nieaktualnym zapisanym kontenerem.

Jeśli ponownie zadzwonisz do użytkownika openContainer(TagManager, String, ContainerOpener.OpenType, Long) z danym containerId, ten sam kontener zwrócony z poprzedniego wywołania zostanie przekazany do powiadomienia, gdy tylko jest dostępna.

Parametry
tagManager TagManager, na którym należy wywołać openContainer
containerId identyfikator kontenera do wczytania
openType wybór sposobu otwierania kontenera
timeoutInMillis to maksymalny czas oczekiwania na wczytanie kontenera w milisekundach (od zapisany sklep lub sieć). Jeśli wartość to null, zostanie użyta wartość DEFAULT_TIMEOUT_IN_MILLIS.
powiadomienia powiadomienia, które zostanie wywołane, gdy kontener będzie dostępny. Będzie może być wywoływana za pomocą zapisanego lub kontenera sieci, jeśli jest dostępny i wczytany przed upływem czasu oczekiwania. W przeciwnym razie wywoływana jest z domyślnym kontenerem. Powiadomienia mogą być wywoływane z w innym wątku.