Classe auxiliar para abrir contêineres.
Este é um wrapper em torno de openContainer(String, Container.Callback)
para usuários que não precisam do alto nível de controle que ele oferece.
Há três estados em que um contêiner pode estar:
- Padrão: é o contêiner que acompanha o app (um binário contêiner ou um arquivo json que é convertido em um contêiner).
- Antigo: um contêiner que foi transferido por download do servidor, mas não recentemente.
- Atual: um contêiner do qual foi feito o download do servidor recentemente.
Aqui está um exemplo em que o autor da chamada quer esperar até 100 milissegundos para receber a contêiner não padrão (a recuperação do 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 receber uma notificação assíncrona quando o contêiner estiver disponível, mas quiser
especificar manualmente o tempo limite para 0,5 segundo, o autor da chamada deve criar uma subclasse
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ática ContainerOpener.ContainerFuture |
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis)
|
| estática anular |
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis, ContainerOpener.Notifier notifier)
|
Constantes
públicas estática final. longos DEFAULT_TIMEOUT_IN_MILLIS
O tempo limite padrão em milissegundos para solicitar o contêiner.
Métodos públicos
públicas estática ContainerOpener.ContainerFuture openContainer (TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis)
Aguarda até timeoutInMillis vez para um contêiner ser carregado (não padrão ou atualizado)
dependendo do openType especificado).
Se o tipo aberto for PREFER_NON_DEFAULT, um valor não padrão (salvo ou recuperado do
network) é carregado e o ContainerFuture é desbloqueado 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, get() pode retornar.
um contêiner padrão.
Se o tipo aberto for PREFER_FRESH, um arquivo novo (salvo ou recuperado do
network) é carregado e o ContainerFuture é desbloqueado assim que
uma das seguintes situações acontece:
- um novo contêiner salvo é carregado.
- se não houver um contêiner salvo ou se o contêiner salvo estiver desatualizado, um contêiner de rede será carregado ou se ocorrer um erro de rede.
- o timer expirar.
Se ocorrer um erro de rede ou o timer expirar, get() pode retornar.
um contêiner padrão ou um contêiner desatualizado salvo.
Se você chamar openContainer uma segunda vez com um determinado containerId,
um ContainerFuture será retornado, e get() retornará um
no mesmo contêiner da primeira chamada.
Parâmetros
| tagManager | o TagManager em que o openContainer |
| 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 a aguardar para carregar o contêiner (de
salva na loja). Se nulo, DEFAULT_TIMEOUT_IN_MILLIS será usado. |
Retorna
- um objeto cujo método GET retornará o contêiner, mas pode bloquear até tempo limiteInMillis até que o contêiner esteja disponível.
públicas estática anular openContainer (TagManager tagManager, String tagManager, ContainerOpener.OpenType tagManager, Long tagManager, ContainerOpener.Notifier
Aguarda até timeoutInMillis vez para um contêiner ser carregado (não padrão ou atualizado)
dependendo do openType especificado).
Se o tipo aberto for PREFER_NON_DEFAULT, um valor não padrão (salvo ou recuperado do
rede) é carregado e transmitido ao 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
containerAvailable(Container) é um contêiner padrão.
Se o tipo aberto for PREFER_FRESH, um arquivo novo (salvo ou recuperado do
rede) é carregado e transmitido ao 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 o contêiner salvo estiver desatualizado, um contêiner de rede será carregado ou se ocorre um erro de rede.
- o timer expirar.
Se ocorrer um erro de rede ou o timer expirar, o contêiner
containerAvailable(Container) pode ser um contêiner salvo 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 ao notificador assim que
quando ele está disponível.
Parâmetros
| tagManager | o TagManager em que o openContainer |
| 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 a aguardar para carregar o contêiner (de
loja e/ou rede salva). Se nulo, DEFAULT_TIMEOUT_IN_MILLIS será usado. |
| notificador | um notificador que será chamado quando o contêiner estiver disponível. 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 de um um thread diferente. |