開啟容器的輔助類別。
這是 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 tagManager、String containerId、ContainerOpener.OpenType openType、Long timeoutInMillis)
|
static void |
openContainer(TagManager tagManager、String containerId、ContainerOpener.OpenType openType、Long timeoutInMillis、ContainerOpener.Notifier 通知器)
|
常數
公開靜態 最終版 長版 DEFAULT_TIMEOUT_IN_MILLIS
要求容器的預設逾時時間 (以毫秒為單位)。
公用方法
public static ContainerOpener.ContainerFuture openContainer (TagManager tagManager、String containerId、ContainerOpener.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 tagManager、String tagManager、ContainerOpener.OpenType tagManager、OpenContainer1}、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 。 |
通知器 | 容器可用時就會呼叫此通知器。系統會使用已儲存的網路容器或網路容器 (如有),並在逾時前載入。否則,系統會使用預設容器呼叫該容器。系統可能會從其他執行緒呼叫該通知器。 |