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 要求容器的預設逾時時間 (以毫秒為單位)。

公用方法摘要

靜態 ContainerOpener.ContainerFuture
openContainer(TagManager tagManagerString containerIdContainerOpener.OpenType openTypeLong timeoutInMillis)
靜態 void
openContainer(TagManager tagManagerString containerIdContainerOpener.OpenType openTypeLong timeoutInMillisContainerOpener.Notifier notifier)

常數

公開 靜態 最終 長 DEFAULT_TIMEOUT_IN_MILLIS

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

常數值: 2,000 人

公用方法

公開 靜態 ContainerOpener.ContainerFuture openContainer (TagManager tagManagerString containerIdContainerOpener.OpenType openTypeLong timeoutInMillis)

容器最多需要 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 直到容器可用為止。

公開 靜態 void openContainer (TagManager tagManagerString tagManagerContainerOpener.OpenType tagManagerLong tagManagerLong tagManagerOpener.ContainerOpener.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
通知器 有容器可用時,系統會呼叫此通知器。 呼叫已儲存的或網路容器 (如果可用且在逾時前載入)。 否則會以預設容器呼叫。該通知器可能從 不同的討論串