รายชื่อผู้ใช้แบบเรียลไทม์ในแอพ Android

ฉันกำลังสร้าง chat app ใน Android แอปจะมีผู้ใช้ครั้งละ 100-150 คน (เปลี่ยนเรียลไทม์) ข้อมูลผู้ใช้มาจากเว็บเซิร์ฟเวอร์ http ฉันกำลังพยายามสร้างรายชื่อผู้ใช้แบบเรียลไทม์ซึ่งจะเปลี่ยนแปลงแบบไดนามิกเมื่อข้อมูลผู้ใช้เปลี่ยนแปลงจากเซิร์ฟเวอร์ มีวิธีต่อไปนี้ในการดำเนินการแก้ไขปัญหานี้ - 1. ฉันสามารถใช้การสำรวจความคิดเห็น http คำขอทุกๆ 2 นาทีเพื่อดึงข้อมูลจากเซิร์ฟเวอร์ การโพลมีสองวิธี First ใช้คลาส Timertask Second สร้างคลาสบริการและใช้ตัวจัดการสัญญาณเตือน วิธีใดมีประสิทธิภาพดีที่สุด ???? ต่อมาฉันพบว่าการสำรวจคือนักฆ่าแบตเตอรี่ตัวจริง มีวิธีอื่นนอกเหนือจากการโพลหาโซลูชันรายชื่อผู้ใช้แบบเรียลไทม์หรือไม่ ? เทคนิคใดบ้างที่แอพสมัยใหม่อย่าง Facebook ใช้ในการเปลี่ยนแปลงข้อมูลแบบเรียลไทม์


person NeiL    schedule 29.10.2014    source แหล่งที่มา


คำตอบ (3)


ทำไมจึงจำเป็น? ฉันจะไม่ทำแบบนั้น คุณสามารถมีบริการที่รับข้อมูลจากเซิร์ฟเวอร์ของคุณและบันทึกลงในฐานข้อมูลท้องถิ่น คุณจะเริ่มให้บริการเมื่อใด นั่นแหละทางเลือกของคุณ! ฉันจะไม่ดาวน์โหลดทุกๆ 2 นาทีหรืออะไรทำนองนั้น บางทีคุณอาจตอบสนองต่อการกระทำของผู้ใช้ได้ ดังนั้นถ้าเขาเปิดแอพหรือคลิกรายการแชทหรืออะไรประมาณนี้

หากคุณต้องการมันโดยตรง คุณสามารถใช้ GoogleCloudMessaging ได้ แต่ฉันคิดว่านั่นเป็นความคิดที่แย่มาก!

person user3621165    schedule 29.10.2014
comment
ใช่ ฉันสามารถใช้ pull เพื่อรีเฟรชได้ บางทีฉันอาจจะทำ แต่ฉันกำลังพยายามหาแนวทางที่ดีที่สุด - person NeiL; 29.10.2014

แทนที่จะใช้ Polling เป็นระยะๆ คุณควรใช้ GCM ในความคิดของฉัน เมื่อใดก็ตามที่มีการเปลี่ยนแปลงผู้ใช้ คุณเพียงแค่ส่งการแจ้งเตือนแบบพุชไปยังแอปของคุณ จากนั้นใน BroadCastReceiver เพียงกด web api เพื่อรับฟีดล่าสุด

person Mukesh Rana    schedule 29.10.2014

SyncAdapter/AccountManager มีประโยชน์สำหรับการใช้งานของคุณ Authenticator (ซึ่งเรียก AccountManager อยู่เบื้องหลัง) สามารถจัดการการตรวจสอบสิทธิ์สำหรับแอปของคุณได้ SyncAdapter สามารถจัดการการซิงค์เป็นระยะจากเซิร์ฟเวอร์ไปยังที่เก็บข้อมูลในเครื่อง คุณไม่จำเป็นต้องดำเนินการด้วยตนเองโดยใช้ AlarmManager สำหรับโค้ดตัวอย่าง อะแดปเตอร์การซิงค์

เซิร์ฟเวอร์ของคุณจะทำงานร่วมกับ SyncAdapter โดยไม่มีการเปลี่ยนแปลงมากนัก ความแตกต่างเพียงอย่างเดียวจะอยู่ในไคลเอ็นต์ของคุณ เช่น แทนที่จะเรียกวิธีการดึงข้อมูลของเซิร์ฟเวอร์ใน AlarmManager คุณจะเรียกวิธีการเหล่านี้ใน onPerformSync() ของคลาสของคุณซึ่งขยาย SyncAdapter แทน

หวังว่านี่จะช่วยได้

person Ashish Tamrakar    schedule 29.10.2014