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