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