Khi nào sử dụng postvalue [trùng lặp]

Nov 01 2020

Trong đoạn mã sau:

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

chúng tôi đang ở trong chuỗi chính, vì viewModelScope.launchđang chạy trên chuỗi chính theo mặc định, giống nhưviewModelScope.launch(dispatchers.main)

Trong main thread, sử dụng postValue có hợp lý không? ý tôi là, không nên như sau:isLoading.value = true ?

Tôi đã tìm thấy rất nhiều đoạn mã này trên internet, nó đúng hay sai ??

Trả lời

MerthanE Nov 02 2020 at 03:34

Theo tài liệu:

Dựa trên tài liệu:

đặt giá trị():

Đặt giá trị. Nếu có những người quan sát tích cực, giá trị sẽ được gửi đến họ. Phương thức này phải được gọi từ luồng chính.

postValue ():

Đăng một nhiệm vụ lên một luồng chính để đặt giá trị đã cho. Nếu bạn đã gọi phương thức này nhiều lần trước khi một luồng chính thực thi một tác vụ đã đăng, thì chỉ giá trị cuối cùng mới được gửi đi.

Vì vậy, tôi sẽ luôn sử dụng setValue khi có thể, trong trường hợp của bạn như bạn đã nhận thấy setValue tốt hơn vì bạn có thể chắc chắn rằng nó sẽ luôn ở trên Main Thread.

Tuy nhiên postValue cũng có thể được gọi từ Main Thread, nhưng sẽ hoạt động kém hơn một chút.

ZakariaHajja Nov 01 2020 at 19:10

Thông thường, có hai cách để đặt giá trị của đối tượng liveData:

  • setValue ==> chuỗi chính
  • postValue ==> các chủ đề khác