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 컨테이너를 사용할 수 있을 때 알림을 수신하는 객체입니다. 
enum ContainerOpener.OpenType 컨테이너를 열기 위한 환경설정입니다. 

상수 요약

long DEFAULT_TIMEOUT_IN_MILLIS 컨테이너 요청에 대한 기본 제한 시간(밀리초)입니다.

공개 메서드 요약

정적 ContainerOpener.ContainerFuture
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis)
정적 void
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis, ContainerOpener.Notifier notifier)

상수

공개 정적 최종 long DEFAULT_TIMEOUT_IN_MILLIS

컨테이너 요청에 대한 기본 제한 시간(밀리초)입니다.

상수 값: 2000

공개 메서드

PublicContainerOpener.ContainerFuture openContainerTagManagertagManagerContainerOpener.OpenType

컨테이너가 로드될 때까지 최대 timeoutInMillis회 대기합니다 (지정된 openType에 따라 기본이 아니거나 최신 상태가 아님).

공개 유형이 PREFER_NON_DEFAULT이면 기본이 아닌 컨테이너 (저장되거나 네트워크에서 가져온 컨테이너)가 로드되고, ContainerFuture는 다음 중 하나가 발생하는 즉시 차단 해제됩니다.

  • 저장된 컨테이너가 로드됩니다.
  • 저장된 컨테이너가 없으면 네트워크 컨테이너가 로드되거나 네트워크 오류가 발생합니다.
  • 타이머가 만료됩니다.

네트워크 오류가 발생하거나 타이머가 만료되면 get()는 기본 컨테이너를 반환할 수 있습니다.

공개 유형이 PREFER_FRESH이면 새 컨테이너 (저장되거나 네트워크에서 가져온 컨테이너)가 로드되고 다음 중 하나가 발생하는 즉시 ContainerFuture가 차단 해제됩니다.

  • 저장된 새로운 컨테이너가 로드됩니다.
  • 저장된 컨테이너가 없거나 저장된 컨테이너가 오래된 경우 네트워크 컨테이너가 로드되거나 네트워크 오류가 발생합니다.
  • 타이머가 만료됩니다.

네트워크 오류가 발생하거나 타이머가 만료되면 get()는 기본 컨테이너 또는 저장된 비활성 컨테이너를 반환할 수 있습니다.

지정된 containerIdopenContainer를 두 번째로 호출하면 ContainerFuture가 반환되며 이 객체의 get()는 첫 번째 호출에서 호출한 것과 동일한 컨테이너를 반환합니다.

매개변수
tagManager openContainer를 호출할 TagManager
containerId 로드할 컨테이너의 ID
openType 컨테이너를 여는 방법 선택에 관한
timeoutInMillis 저장된 저장소에서 컨테이너를 로드하기 위해 기다리는 최대 시간 (밀리초)입니다. null이면 DEFAULT_TIMEOUT_IN_MILLIS가 사용됩니다.
반환 값
  • get 메서드가 컨테이너를 반환하지만 컨테이너를 사용할 수 있을 때까지 timeoutInMillis까지 차단할 수 있는 객체입니다.

Public openContainerTagManagertagManagerContainerOpener.OpenTypeContainerOpener.Notifier

컨테이너가 로드될 때까지 최대 timeoutInMillis회 대기합니다 (지정된 openType에 따라 기본이 아니거나 최신 상태가 아님).

열린 유형이 PREFER_NON_DEFAULT인 경우 기본이 아닌 컨테이너 (저장되거나 네트워크에서 가져온 컨테이너)가 로드되어 알림자로 전달됩니다. 알림자는 다음 중 하나가 발생하는 즉시 호출됩니다.

  • 저장된 컨테이너가 로드됩니다.
  • 저장된 컨테이너가 없으면 네트워크 컨테이너가 로드되거나 네트워크 오류가 발생합니다.
  • 타이머가 만료됩니다.

네트워크 오류가 발생하거나 타이머가 만료되면 containerAvailable(Container)에 전달되는 컨테이너가 기본 컨테이너입니다.

열린 유형이 PREFER_FRESH이면 새로운 컨테이너 (저장되거나 네트워크에서 가져온 컨테이너)가 로드되어 알림 프로그램으로 전달됩니다. 알림자는 다음 중 하나가 발생하는 즉시 호출됩니다.

  • 저장된 새로운 컨테이너가 로드됩니다.
  • 저장된 컨테이너가 없거나 저장된 컨테이너가 오래된 경우 네트워크 컨테이너가 로드되거나 네트워크 오류가 발생합니다.
  • 타이머가 만료됩니다.

네트워크 오류가 발생하거나 타이머가 만료되면 containerAvailable(Container)에 전달된 컨테이너가 기본 컨테이너이거나 비활성으로 저장된 컨테이너일 수 있습니다.

지정된 containerIdopenContainer(TagManager, String, ContainerOpener.OpenType, Long)를 두 번 호출하는 경우 이전 호출에서 반환된 동일한 컨테이너가 사용 가능해지는 즉시 알림자에 전달됩니다.

매개변수
tagManager openContainer를 호출할 TagManager
containerId 로드할 컨테이너의 ID
openType 컨테이너를 여는 방법 선택에 관한
timeoutInMillis 저장된 저장소 또는 네트워크에서 컨테이너 로드를 기다리는 최대 시간 (밀리초)입니다. null이면 DEFAULT_TIMEOUT_IN_MILLIS가 사용됩니다.
알림 컨테이너를 사용할 수 있을 때 호출되는 알림입니다. 시간 제한 전에 사용 가능하고 로드되는 경우 저장된 컨테이너 또는 네트워크 컨테이너로 호출됩니다. 그렇지 않으면 기본 컨테이너로 호출됩니다. 알림자는 다른 스레드에서 호출될 수 있습니다.