用于打开容器的辅助类。
这是 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 tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis)
|
static void |
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis, ContainerOpener.Notifier 通知程序)
|
常量
public static final long DEFAULT_TIMEOUT_IN_MILLIS
请求容器的默认超时(以毫秒为单位)。
公共方法
public static ContainerOpener.ContainerFuture openContainer (TagManager tagManager, String containerId, ContainerOpener.OpenType ContainerOpener.OpenType ContainerOpener.OpenType TagManager tagManager tagManager, ContainerOpener.OpenType ContainerOpener.OpenType TagManager,
最多等待 timeoutInMillis
次加载容器(非默认或全新,具体取决于指定的 openType
)。
如果打开类型为 PREFER_NON_DEFAULT
,则只要发生以下任一情况,系统就会加载非默认(在网络中保存或从网络检索)容器,并取消屏蔽 ContainerFuture:
- 一个已保存的容器已加载完毕。
- 如果没有已保存的容器,则会加载网络容器或发生网络错误。
- 。
如果发生网络连接错误或计时器到期,get()
可能会返回默认容器。
如果 open 类型为 PREFER_FRESH
,则只要发生以下任一情况,系统就会加载全新的(在网络中保存或从网络检索的)容器,并立即取消屏蔽 ContainerFuture:
- 系统将加载已保存的新容器
- 如果没有已保存的容器或保存的容器已过时,则系统会加载网络容器或发生网络错误。
- 。
如果发生网络连接错误或计时器到期,get()
可能会返回默认容器或已保存的过时容器。
如果您使用给定的 containerId
再次调用 openContainer
,系统将返回一个 ContainerFuture
,其 get()
将返回与第一次调用相同的容器。
参数
tagManager | 要在其上调用 openContainer 的 TagManager |
containerId | 要加载的容器的 ID |
openType | 选择如何打开容器 |
timeoutInMillis | 加载容器(从保存的存储区)等待的最大毫秒数。如果为 null,将使用 DEFAULT_TIMEOUT_IN_MILLIS 。 |
返回
- 一个对象,其 get 方法将返回容器,但最长可以在 timeoutInMillis 中阻塞,直到容器可用。
public static void openContainer (TagManager tagManager, String tagManager, ContainerOpener.OpenType openContainer 、time1Not1}、time1Not1}、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 | 加载容器(从保存的存储区和/或网络)等待的最大毫秒数。如果为 null,将使用 DEFAULT_TIMEOUT_IN_MILLIS 。 |
通知程序 | 当容器可用时将调用的通知程序。系统将使用已保存的容器或网络容器(如果可用且在超时之前加载)调用该容器。 否则,系统将使用默认容器调用它。可以从其他线程调用通知程序。 |