ContainerOpener

公開類別 ContainerOpener

開啟容器的輔助類別。

這是 openContainer(String, Container.Callback) 方法的包裝函式,適用於不需要提供精細控管層級的使用者。

容器可能處於三種狀態:

  • 預設:這是隨附應用程式的容器 (二進位容器或轉換為容器的 JSON 檔案)。
  • 已過時:已從伺服器下載但最近並未下載的容器。
  • 更新:最近從伺服器下載的容器。

在這個例子中,呼叫端想要等待最多 100 毫秒才能取得非預設容器 (如果逾時,則擷取預設容器)。

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

如果呼叫端希望在容器可供使用時,以非同步方式通知,但想手動將逾時時間指定為 0.5 秒,則呼叫端應將 ContainerOpener.Notifier 設為子類別。使用範例:

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

巢狀類別摘要

ContainerOpener.ContainerFuture 用於傳回容器的物件。
ContainerOpener.Notifier 在容器可供使用時接收通知的物件。
列舉 ContainerOpener.OpenType 開啟容器的偏好設定。

常數摘要

long DEFAULT_TIMEOUT_IN_MILLIS 要求容器的預設逾時時間 (以毫秒為單位)。

公用方法摘要

static ContainerOpener.ContainerFuture
openContainer(TagManager tagManagerString containerIdContainerOpener.OpenType openTypeLong timeoutInMillis)
static void
openContainer(TagManager tagManagerString containerIdContainerOpener.OpenType openTypeLong timeoutInMillisContainerOpener.Notifier 通知器)

常數

公開靜態 最終版 長版 DEFAULT_TIMEOUT_IN_MILLIS

要求容器的預設逾時時間 (以毫秒為單位)。

常數值: 2000

公用方法

public static ContainerOpener.ContainerFuture openContainer (TagManager tagManagerString containerIdContainerOpener.OpenType openType openType

最多等待 timeoutInMillis 次,讓容器載入完成 (非預設或更新,視指定的 openType 而定)。

如果開啟類型為 PREFER_NON_DEFAULT,系統就會載入非預設 (儲存或從網路擷取) 容器,並在發生下列其中一種情況時立即解除封鎖 ContainerFuture:

  • 系統就會載入已儲存的容器。
  • 如果沒有已儲存的容器,系統就會載入網路容器或發生網路錯誤。
  • 計時器的倒數完畢後,

如果發生網路錯誤或計時器到期,get() 可能會傳回預設容器。

如果開啟類型為 PREFER_FRESH,系統就會載入新的 (儲存或從網路擷取) 容器,並在發生下列其中一種情況時立即解除封鎖 ContainerFuture:

  • 系統就會載入已儲存的新容器。
  • 如果沒有已儲存的容器或已儲存的容器過時,系統就會載入網路容器或發生網路錯誤。
  • 計時器的倒數完畢後,

如果發生網路錯誤或計時器到期,get() 可能會傳回預設容器或已儲存的過時容器。

如果您再次使用指定的 containerId 呼叫 openContainer,系統會傳回 ContainerFuture,其 get() 會傳回與第一次呼叫相同的容器。

參數
tagManager 要呼叫 openContainer 的 TagManager
containerId 要載入的容器 ID
openType 容器的開啟方式
timeoutInMillis 等待載入容器的最長毫秒數 (從儲存的儲存庫)。如果為空值,將會使用 DEFAULT_TIMEOUT_IN_MILLIS
傳回
  • 其 get 方法會傳回容器,但最多可能會封鎖 timeoutInMillis,直到容器可用為止。

public static void openContainer (TagManager tagManagerString tagManagerContainerOpener.OpenType tagManagerOpenContainer1}OpenContainer1}tagManagerContainerOpener.Notifier

最多等待 timeoutInMillis 次,讓容器載入完成 (非預設或更新,視指定的 openType 而定)。

如果開啟類型為 PREFER_NON_DEFAULT,系統會載入非預設 (儲存或從網路擷取) 容器,並傳遞至通知器。只要發生下列任一情況,系統就會立即呼叫通知器:

  • 系統就會載入已儲存的容器。
  • 如果沒有已儲存的容器,系統就會載入網路容器或發生網路錯誤。
  • 計時器的倒數完畢後,

如果發生網路錯誤或計時器已過期,傳入 containerAvailable(Container) 的容器就是預設容器。

如果開啟類型為 PREFER_FRESH,系統會載入新的 (儲存或從網路擷取) 容器,並傳遞至通知器。只要發生下列任一情況,系統就會立即呼叫通知器:

  • 系統就會載入已儲存的新容器。
  • 如果沒有已儲存的容器或已儲存的容器過時,系統就會載入網路容器或發生網路錯誤。
  • 計時器的倒數完畢後,

如果發生網路錯誤或計時器已過期,傳入 containerAvailable(Container) 的容器可能是預設值或過時的儲存容器。

如果您再次使用指定的 containerId 呼叫 openContainer(TagManager, String, ContainerOpener.OpenType, Long),前一個呼叫傳回的容器會在可用時立即傳遞至通知器。

參數
tagManager 要呼叫 openContainer 的 TagManager
containerId 要載入的容器 ID
openType 容器的開啟方式
timeoutInMillis 等待載入容器的最長毫秒數 (來自已儲存的商店和/或網路)。如果為空值,將會使用 DEFAULT_TIMEOUT_IN_MILLIS
通知器 容器可用時就會呼叫此通知器。系統會使用已儲存的網路容器或網路容器 (如有),並在逾時前載入。否則,系統會使用預設容器呼叫該容器。系統可能會從其他執行緒呼叫該通知器。