ContainerOpener

classe pública ContainerOpener

Classe auxiliar para abrir contêineres.

Esse é um wrapper em torno do método openContainer(String, Container.Callback) para usuários que não precisam do nível refinado de controle fornecido.

Um contêiner pode estar em três estados:

  • Padrão: é o contêiner enviado com o app (seja um contêiner binário ou um arquivo JSON convertido em um contêiner).
  • Desatualizado: contêiner que foi transferido por download do servidor, mas não recentemente.
  • Atualizado: um contêiner que foi transferido por download do servidor recentemente.

Veja a seguir um exemplo em que o autor da chamada quer esperar até 100 milissegundos para receber o contêiner não padrão (recuperando o contêiner padrão se ele expirar).

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

Se o autor da chamada quiser ser notificado de forma assíncrona quando o contêiner estiver disponível, mas quiser especificar manualmente o tempo limite para 0,5 segundo, ele deverá criar uma subclasse para ContainerOpener.Notifier. Exemplo de uso:

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

Resumo de classes aninhadas

Interface ContainerOpener.ContainerFuture Um objeto que retornará um Container. 
Interface ContainerOpener.Notifier Objeto que receberá uma notificação quando um contêiner estiver disponível para uso. 
enum ContainerOpener.OpenType Preferências para abrir um contêiner. 

Resumo da constante

long DEFAULT_TIMEOUT_IN_MILLIS O tempo limite padrão em milissegundos para solicitar o contêiner.

Resumo do método público

estático ContainerOpener.ContainerFuture
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis)
estático void
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis, ContainerOpener.Notifier notifier)

Constantes

público estático final long DEFAULT_TIMEOUT_IN_MILLIS

O tempo limite padrão em milissegundos para solicitar o contêiner.

Valor da constante: 2000

Métodos públicos

public estático ContainerOpener.ContainerFuture openContainer (TagManager tagManager, String containerId, ContainerOpener.OpenType openType, openType{/14

Aguarda até timeoutInMillis tempo para o carregamento de um contêiner (não padrão ou atualizado, dependendo do openType especificado).

Se o tipo aberto for PREFER_NON_DEFAULT, um contêiner não padrão (salvo ou recuperado da rede) será carregado e o ContainerFuture será desbloqueado assim que uma das seguintes ações acontecer:

  • um contêiner salvo é carregado.
  • Se não houver um contêiner salvo, um contêiner de rede será carregado ou um erro de rede vai ocorrer.
  • o timer expirar.

Se ocorrer um erro de rede ou o timer expirar, get() poderá retornar um contêiner padrão.

Se o tipo aberto for PREFER_FRESH, um contêiner novo (salvo ou recuperado da rede) será carregado e o ContainerFuture será desbloqueado assim que uma das seguintes ações ocorrer:

  • um novo contêiner salvo é carregado.
  • Se não houver um contêiner salvo ou se ele estiver desatualizado, um contêiner de rede será carregado ou um erro de rede vai ocorrer.
  • o timer expirar.

Se ocorrer um erro de rede ou o timer expirar, get() poderá retornar um contêiner padrão ou um contêiner desatualizado salvo.

Se você chamar openContainer uma segunda vez com um determinado containerId, será retornado um ContainerFuture, cujo get() retornará o mesmo contêiner da primeira chamada.

Parâmetros
tagManager o TagManager em que o openContainer será chamado.
containerId o ID do contêiner a ser carregado
openType a escolha de como abrir o contêiner
timeoutInMillis o número máximo de milissegundos de espera para carregar o contêiner (do repositório salvo). Se o valor for nulo, DEFAULT_TIMEOUT_IN_MILLIS será usado.
Retorna
  • Um objeto cujo método "get" retornará o contêiner, mas poderá ser bloqueado até "timeInMillis" até que o contêiner esteja disponível.

public estático void openContainer (TagManager tagManager, String tagManager, ContainerOpener.OpenType tagManager, 10}openType, timeout}tagManager.ContainerOpener.Notifier

Aguarda até timeoutInMillis tempo para o carregamento de um contêiner (não padrão ou atualizado, dependendo do openType especificado).

Se o tipo aberto for PREFER_NON_DEFAULT, um contêiner não padrão (salvo ou recuperado da rede) será carregado e transmitido para o notificador. O notificador é chamado assim que uma das seguintes situações acontece:

  • um contêiner salvo é carregado.
  • Se não houver um contêiner salvo, um contêiner de rede será carregado ou um erro de rede vai ocorrer.
  • o timer expirar.

Se ocorrer um erro de rede ou o timer expirar, o contêiner transmitido para containerAvailable(Container) será um contêiner padrão.

Se o tipo aberto for PREFER_FRESH, um novo contêiner (salvo ou recuperado da rede) será carregado e transmitido para o notificador. O notificador é chamado assim que uma das seguintes situações acontece:

  • um novo contêiner salvo é carregado.
  • Se não houver um contêiner salvo ou se ele estiver desatualizado, um contêiner de rede será carregado ou um erro de rede vai ocorrer.
  • o timer expirar.

Se ocorrer um erro de rede ou o timer expirar, o contêiner transmitido para containerAvailable(Container) pode ser padrão ou desatualizado.

Se você chamar openContainer(TagManager, String, ContainerOpener.OpenType, Long) uma segunda vez com um determinado containerId, o mesmo contêiner retornado da chamada anterior será transmitido para o notificador assim que estiver disponível.

Parâmetros
tagManager o TagManager em que o openContainer será chamado.
containerId o ID do contêiner a ser carregado
openType a escolha de como abrir o contêiner
timeoutInMillis o número máximo de milissegundos de espera para carregar o contêiner (de uma loja e/ou rede salvas). Se o valor for nulo, DEFAULT_TIMEOUT_IN_MILLIS será usado.
notificador um notificador que será chamado quando o contêiner estiver disponível. Ele será chamado com o contêiner salvo ou de rede, se disponível e carregado antes do tempo limite. Caso contrário, ele será chamado com o contêiner padrão. O notificador pode ser chamado a partir de uma linha de execução diferente.