컨테이너를 열기 위한 도우미 클래스
이는 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
컨테이너 요청에 대한 기본 제한 시간(밀리초)입니다.
공개 메서드
PublicContainerOpener.ContainerFuture openContainerTagManagertagManagerContainerOpener.OpenType
컨테이너가 로드될 때까지 최대 timeoutInMillis
회 대기합니다 (지정된 openType
에 따라 기본이 아니거나 최신 상태가 아님).
공개 유형이 PREFER_NON_DEFAULT
이면 기본이 아닌 컨테이너 (저장되거나 네트워크에서 가져온 컨테이너)가 로드되고, ContainerFuture는 다음 중 하나가 발생하는 즉시 차단 해제됩니다.
- 저장된 컨테이너가 로드됩니다.
- 저장된 컨테이너가 없으면 네트워크 컨테이너가 로드되거나 네트워크 오류가 발생합니다.
- 타이머가 만료됩니다.
네트워크 오류가 발생하거나 타이머가 만료되면 get()
는 기본 컨테이너를 반환할 수 있습니다.
공개 유형이 PREFER_FRESH
이면 새 컨테이너 (저장되거나 네트워크에서 가져온 컨테이너)가 로드되고 다음 중 하나가 발생하는 즉시 ContainerFuture가 차단 해제됩니다.
- 저장된 새로운 컨테이너가 로드됩니다.
- 저장된 컨테이너가 없거나 저장된 컨테이너가 오래된 경우 네트워크 컨테이너가 로드되거나 네트워크 오류가 발생합니다.
- 타이머가 만료됩니다.
네트워크 오류가 발생하거나 타이머가 만료되면 get()
는 기본 컨테이너 또는 저장된 비활성 컨테이너를 반환할 수 있습니다.
지정된 containerId
로 openContainer
를 두 번째로 호출하면 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)
에 전달된 컨테이너가 기본 컨테이너이거나 비활성으로 저장된 컨테이너일 수 있습니다.
지정된 containerId
로 openContainer(TagManager, String, ContainerOpener.OpenType, Long)
를 두 번 호출하는 경우 이전 호출에서 반환된 동일한 컨테이너가 사용 가능해지는 즉시 알림자에 전달됩니다.
매개변수
tagManager | openContainer를 호출할 TagManager |
containerId | 로드할 컨테이너의 ID |
openType | 컨테이너를 여는 방법 선택에 관한 |
timeoutInMillis | 저장된 저장소 또는 네트워크에서 컨테이너 로드를 기다리는 최대 시간 (밀리초)입니다. null이면 DEFAULT_TIMEOUT_IN_MILLIS 가 사용됩니다. |
알림 | 컨테이너를 사용할 수 있을 때 호출되는 알림입니다. 시간 제한 전에 사용 가능하고 로드되는 경우 저장된 컨테이너 또는 네트워크 컨테이너로 호출됩니다. 그렇지 않으면 기본 컨테이너로 호출됩니다. 알림자는 다른 스레드에서 호출될 수 있습니다. |