เมื่อใดควรใช้ postvalue [ซ้ำ]

Nov 01 2020

ในส่วนของรหัสต่อไปนี้:

    viewModelScope.launch {
  
        isLoading.postValue(true) 
            
        .....
   }

เราอยู่ในเธรดหลักเนื่องจากviewModelScope.launchทำงานบนเธรดหลักโดยค่าเริ่มต้นเช่นเดียวกับviewModelScope.launch(dispatchers.main)

ในกระทู้หลักการใช้ postValue เหมาะสมหรือไม่ ฉันหมายความว่าไม่ควรเป็น:isLoading.value = true ?

ฉันเจอโค้ดนี้มากมายบนอินเทอร์เน็ตถูกหรือผิด ??

คำตอบ

MerthanE Nov 02 2020 at 03:34

ตามเอกสาร:

อ้างอิงจากเอกสารประกอบ:

ตั้งค่า():

ตั้งค่า หากมีผู้สังเกตการณ์ที่ใช้งานอยู่ค่าจะถูกส่งไปให้ ต้องเรียกวิธีนี้จากเธรดหลัก

postValue ():

โพสต์งานไปยังเธรดหลักเพื่อกำหนดค่าที่กำหนด หากคุณเรียกวิธีนี้หลายครั้งก่อนที่เธรดหลักจะเรียกใช้งานที่โพสต์ระบบจะส่งเฉพาะค่าสุดท้ายเท่านั้น

ดังนั้นฉันจะใช้ setValue เสมอเมื่อเป็นไปได้ในกรณีของคุณเนื่องจากคุณสังเกตเห็นว่า setValue นั้นดีกว่าเพราะคุณมั่นใจได้ว่ามันจะอยู่ใน Main Thread เสมอ

อย่างไรก็ตามสามารถเรียก postValue ได้จาก Main Thread แต่จะแย่ลงเล็กน้อย

ZakariaHajja Nov 01 2020 at 19:10

โดยปกติมีสองวิธีในการตั้งค่าของวัตถุ liveData:

  • setValue ==> เธรดหลัก
  • postValue ==> เธรดอื่น ๆ