คลาส Helper สำหรับการเปิดคอนเทนเนอร์
นี่คือ Wrapper รอบๆ openContainer(String, Container.Callback)
สำหรับผู้ใช้ที่ไม่ต้องการการควบคุมในระดับที่ละเอียดมากขึ้น
คอนเทนเนอร์มีสถานะได้ 3 สถานะดังนี้
- ค่าเริ่มต้น: นี่คือคอนเทนเนอร์ที่ส่งไปยังแอป (ไม่ว่าจะเป็นไบนารี หรือไฟล์ 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 | ค่ากำหนดสำหรับการเปิดคอนเทนเนอร์ | |
สรุปอย่างสม่ำเสมอ
| ยาว | DEFAULT_TIMEOUT_IN_MILLIS | ระยะหมดเวลาเริ่มต้นเป็นมิลลิวินาทีสำหรับการขอคอนเทนเนอร์ |
ข้อมูลสรุปของเมธอดสาธารณะ
| คงที่ ContainerOpener.ContainerFuture |
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis)
|
| คงที่ เป็นโมฆะ |
openContainer(TagManager tagManager, String containerId, ContainerOpener.OpenType openType, Long timeoutInMillis, ContainerOpener.Notifier ตัวแจ้งเตือน)
|
ค่าคงที่
สาธารณะ คงที่ รอบชิงชนะเลิศ ยาว DEFAULT_TIMEOUT_IN_MILLIS
ระยะหมดเวลาเริ่มต้นเป็นมิลลิวินาทีสำหรับการขอคอนเทนเนอร์
วิธีการสาธารณะ
สาธารณะ คงที่ ContainerOpener.ContainerFuture openContainer (TagManager tagManager, สตริง tagManager, ContainerOpener.OpenType tagManager, tagManager)
รอสูงสุด timeoutInMillis ครั้งก่อนที่จะโหลดคอนเทนเนอร์หนึ่งๆ (ไม่ใช่ค่าเริ่มต้นหรือรีเฟรชใหม่
ขึ้นอยู่กับ openType ที่ระบุ)
หากประเภทที่เปิดคือ PREFER_NON_DEFAULT ไม่ใช่ค่าเริ่มต้น (บันทึกหรือดึงข้อมูลจาก
เครือข่าย) ถูกโหลดและ ContainerFuture ถูกยกเลิกการปิดกั้นทันที
จะเกิดกรณีใดกรณีหนึ่งต่อไปนี้
- ระบบจะโหลดคอนเทนเนอร์ที่บันทึกไว้
- หากไม่มีคอนเทนเนอร์ที่บันทึกไว้ แสดงว่าคอนเทนเนอร์เครือข่ายโหลดขึ้นหรือเกิดข้อผิดพลาดของเครือข่าย
- การจับเวลานั้นหมดอายุ
หากเกิดข้อผิดพลาดเกี่ยวกับเครือข่ายหรือตัวจับเวลาหมดอายุ get() อาจกลับมาทำงานอีกครั้ง
คอนเทนเนอร์เริ่มต้น
ถ้าประเภทที่เปิดคือ PREFER_FRESH ไฟล์ (ที่บันทึกไว้หรือดึงข้อมูลจาก)
เครือข่าย) ถูกโหลดและ ContainerFuture ถูกยกเลิกการปิดกั้นทันที
จะเกิดกรณีใดกรณีหนึ่งต่อไปนี้
- คอนเทนเนอร์ใหม่ที่บันทึกไว้จะโหลดขึ้น
- หากไม่มีคอนเทนเนอร์ที่บันทึกไว้ หรือคอนเทนเนอร์ที่บันทึกไว้เก่าแล้ว คอนเทนเนอร์เครือข่าย โหลดแล้วหรือเกิดข้อผิดพลาดเกี่ยวกับเครือข่าย
- การจับเวลานั้นหมดอายุ
หากเกิดข้อผิดพลาดเกี่ยวกับเครือข่ายหรือตัวจับเวลาหมดอายุ get() อาจกลับมาทำงานอีกครั้ง
คอนเทนเนอร์เริ่มต้น หรือคอนเทนเนอร์ที่ไม่มีอัปเดตที่บันทึกไว้
หากคุณโทรหา openContainer เป็นครั้งที่ 2 ด้วยหมายเลข containerId ที่ระบุ
ระบบจะส่งคืน ContainerFuture ซึ่ง get() จะส่งคืน
คอนเทนเนอร์เดียวกับการเรียกครั้งแรก
พารามิเตอร์
| tagManager | TagManager ที่จะเรียกใช้ openContainer |
| containerId | รหัสของคอนเทนเนอร์ที่จะโหลด |
| openType | ตัวเลือกในการเปิดคอนเทนเนอร์ |
| timeoutInMillis | จำนวนสูงสุดของมิลลิวินาทีที่รอเพื่อโหลดคอนเทนเนอร์ (ตั้งแต่
ร้านค้าที่บันทึกไว้) หากเป็นค่าว่าง ระบบจะใช้ DEFAULT_TIMEOUT_IN_MILLIS |
การคืนสินค้า
- ออบเจ็กต์ที่เมธอด get จะส่งคืนค่าคอนเทนเนอร์ แต่อาจบล็อกได้ถึง ระยะหมดเวลา InMillis จนกว่าคอนเทนเนอร์จะพร้อมใช้งาน
สาธารณะ คงที่ เป็นโมฆะ openContainer (TagManager tagManager, สตริง tagManager, ContainerOpener.OpenType tagManager, Long tagManager, ContainerOpener.Notifier
รอสูงสุด timeoutInMillis ครั้งก่อนที่จะโหลดคอนเทนเนอร์หนึ่งๆ (ไม่ใช่ค่าเริ่มต้นหรือรีเฟรชใหม่
ขึ้นอยู่กับ openType ที่ระบุ)
หากประเภทที่เปิดคือ PREFER_NON_DEFAULT ไม่ใช่ค่าเริ่มต้น (บันทึกหรือดึงข้อมูลจาก
network) จะโหลดและส่งผ่านไปยังตัวแจ้ง ระบบจะเรียกผู้แจ้งเตือนทันทีที่
จะเกิดกรณีใดกรณีหนึ่งต่อไปนี้
- ระบบจะโหลดคอนเทนเนอร์ที่บันทึกไว้
- หากไม่มีคอนเทนเนอร์ที่บันทึกไว้ แสดงว่าคอนเทนเนอร์เครือข่ายโหลดขึ้นหรือเกิดข้อผิดพลาดของเครือข่าย
- การจับเวลานั้นหมดอายุ
หากเกิดข้อผิดพลาดเกี่ยวกับเครือข่ายหรือหมดเวลาการจับเวลา ระบบจะส่งคอนเทนเนอร์ไปยัง
containerAvailable(Container) เป็นคอนเทนเนอร์เริ่มต้น
ถ้าประเภทที่เปิดคือ PREFER_FRESH ไฟล์ (ที่บันทึกไว้หรือดึงข้อมูลจาก)
network) จะโหลดและส่งผ่านไปยังตัวแจ้ง ระบบจะเรียกผู้แจ้งเตือนทันทีที่
จะเกิดกรณีใดกรณีหนึ่งต่อไปนี้
- คอนเทนเนอร์ใหม่ที่บันทึกไว้จะโหลดขึ้น
- หากไม่มีคอนเทนเนอร์ที่บันทึกไว้หรือคอนเทนเนอร์ที่บันทึกไว้เก่าแล้ว คอนเทนเนอร์เครือข่ายจะโหลดขึ้น หรือเกิดข้อผิดพลาดเกี่ยวกับเครือข่าย
- การจับเวลานั้นหมดอายุ
หากเกิดข้อผิดพลาดเกี่ยวกับเครือข่ายหรือหมดเวลาการจับเวลา ระบบจะส่งคอนเทนเนอร์ไปยัง
containerAvailable(Container) อาจเป็นคอนเทนเนอร์ที่บันทึกไว้เริ่มต้นหรือไม่อัปเดต
หากคุณโทรหา openContainer(TagManager, String, ContainerOpener.OpenType, Long) เป็นครั้งที่ 2 ด้วยหมายเลข containerId ที่ระบุ
คอนเทนเนอร์เดียวกันที่แสดงผลจากการเรียกใช้ก่อนหน้าจะถูกส่งไปในตัวแจ้งทันที
พร้อมใช้งานแล้ว
พารามิเตอร์
| tagManager | TagManager ที่จะเรียกใช้ openContainer |
| containerId | รหัสของคอนเทนเนอร์ที่จะโหลด |
| openType | ตัวเลือกในการเปิดคอนเทนเนอร์ |
| timeoutInMillis | จำนวนสูงสุดของมิลลิวินาทีที่รอเพื่อโหลดคอนเทนเนอร์ (ตั้งแต่
ร้านค้าและ/หรือเครือข่ายที่บันทึกไว้) หากเป็นค่าว่าง ระบบจะใช้ DEFAULT_TIMEOUT_IN_MILLIS |
| เครื่องมือแจ้งเตือน | ซึ่งจะเรียกใช้เมื่อคอนเทนเนอร์พร้อมใช้งาน จะเป็น ด้วยคอนเทนเนอร์ที่บันทึกไว้หรือเครือข่าย ถ้ามี และโหลดก่อนหมดเวลา มิเช่นนั้น ระบบจะเรียกใช้คอนเทนเนอร์ดังกล่าวด้วยคอนเทนเนอร์เริ่มต้น เครื่องมือแจ้งอาจมีการเรียกจาก ชุดข้อความอื่น |