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 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

请求容器的默认超时(以毫秒为单位)。

常量值: 2000

公共方法

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
通知程序 当容器可用时将调用的通知程序。系统将使用已保存的容器或网络容器(如果可用且在超时之前加载)调用该容器。 否则,系统将使用默认容器调用它。可以从其他线程调用通知程序。