ตัวเปิดคอนเทนเนอร์

ชั้นเรียนสาธารณะ ContainerOpener

คลาส 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

ระยะหมดเวลาเริ่มต้นเป็นมิลลิวินาทีสำหรับการขอคอนเทนเนอร์

มูลค่าคงที่: 2000

วิธีการสาธารณะ

สาธารณะ คงที่ 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
เครื่องมือแจ้งเตือน ซึ่งจะเรียกใช้เมื่อคอนเทนเนอร์พร้อมใช้งาน จะเป็น ด้วยคอนเทนเนอร์ที่บันทึกไว้หรือเครือข่าย ถ้ามี และโหลดก่อนหมดเวลา มิเช่นนั้น ระบบจะเรียกใช้คอนเทนเนอร์ดังกล่าวด้วยคอนเทนเนอร์เริ่มต้น เครื่องมือแจ้งอาจมีการเรียกจาก ชุดข้อความอื่น