เมื่อใดควรใช้ postvalue [ซ้ำ]
ในส่วนของรหัสต่อไปนี้:
viewModelScope.launch {
isLoading.postValue(true)
.....
}
เราอยู่ในเธรดหลักเนื่องจากviewModelScope.launchทำงานบนเธรดหลักโดยค่าเริ่มต้นเช่นเดียวกับviewModelScope.launch(dispatchers.main)
ในกระทู้หลักการใช้ postValue เหมาะสมหรือไม่ ฉันหมายความว่าไม่ควรเป็น:isLoading.value = true ?
ฉันเจอโค้ดนี้มากมายบนอินเทอร์เน็ตถูกหรือผิด ??
คำตอบ
ตามเอกสาร:
อ้างอิงจากเอกสารประกอบ:
ตั้งค่า():
ตั้งค่า หากมีผู้สังเกตการณ์ที่ใช้งานอยู่ค่าจะถูกส่งไปให้ ต้องเรียกวิธีนี้จากเธรดหลัก
postValue ():
โพสต์งานไปยังเธรดหลักเพื่อกำหนดค่าที่กำหนด หากคุณเรียกวิธีนี้หลายครั้งก่อนที่เธรดหลักจะเรียกใช้งานที่โพสต์ระบบจะส่งเฉพาะค่าสุดท้ายเท่านั้น
ดังนั้นฉันจะใช้ setValue เสมอเมื่อเป็นไปได้ในกรณีของคุณเนื่องจากคุณสังเกตเห็นว่า setValue นั้นดีกว่าเพราะคุณมั่นใจได้ว่ามันจะอยู่ใน Main Thread เสมอ
อย่างไรก็ตามสามารถเรียก postValue ได้จาก Main Thread แต่จะแย่ลงเล็กน้อย
โดยปกติมีสองวิธีในการตั้งค่าของวัตถุ liveData:
- setValue ==> เธรดหลัก
- postValue ==> เธรดอื่น ๆ