Như bạn có thể biết trong hệ sinh thái phản ứng, chúng ta có một Đài quan sát phát ra dữ liệu và một Người quan sát đăng ký (được thông báo) về phát xạ quan sát này, không có gì lạ là cách thức hoạt động của cái gọi là Mẫu quan sát. Một "tiếng hét" có thể quan sát được một cái gì đó, Người quan sát được thông báo rằng Đài quan sát có thể hét lên một cái gì đó trong một thời điểm nhất định.
Hãy suy nghĩ LiveData
như một Đài quan sát cho phép bạn quản lý các Quan sát viên đang ở active
trạng thái. Nói cách khác LiveData
là một quan sát đơn giản nhưng cũng chăm sóc vòng đời.
Nhưng hãy xem hai trường hợp mã bạn yêu cầu:
A) Dữ liệu trực tiếp
B) RXJava
A) Đây là một triển khai cơ bản của LiveData
1) bạn thường khởi tạo LiveData trong ViewModel để duy trì thay đổi hướng (bạn có thể có LiveData chỉ đọc hoặc MutableLiveData có thể ghi được, vì vậy bạn thường phơi ra bên ngoài lớp LiveData)
2) trong OnCreate
phương thức Hoạt động chính (không phải ViewModel), bạn "đăng ký" một đối tượng Người quan sát (thường là phương thức onChanged)
3) bạn khởi chạy phương thức quan sát để thiết lập liên kết
Đầu tiên ViewModel
(sở hữu logic kinh doanh)
class ViewModel : ViewModel() { //Point 1
var liveData: MutableLiveData<Int> = MutableLiveData()
}
Và đây là MainActivity
(càng ngu ngốc càng tốt)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val ViewModelProvider= ViewModelProviders.of(this).get(ViewModel::class.java)
ViewModelProvider.observe(this, Observer {//Points 2 and 3
//what you want to observe
})
}
}
}
B) Đây là triển khai cơ bản của RXJava
1) bạn tuyên bố một quan sát
2) bạn khai báo một Người quan sát
3) bạn đăng ký Đài quan sát với Người quan sát
Observable.just(1, 2, 3, 4, 5, 6) // Point 1
.subscribe(new Subscriber() { //Points 2 & 3
@Override
public void onCompleted() {
System.out.println("Complete!");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Double value) {
System.out.println("onNext: " + value);
}
});
Đặc biệt LiveData
được sử dụng với Lifecycle
và thường với ViewModel
(như chúng ta đã thấy) các thành phần kiến trúc. Trong thực tế khi LiveData
được kết hợp với ViewModel cho phép bạn cập nhật theo thời gian thực mọi thay đổi trong Trình quan sát, để các sự kiện được quản lý theo thời gian thực khi cần thiết. Để sử dụng, chúng LiveData
tôi khuyên bạn nên biết khái niệm về vòng đời và các đối tượng tương đối LifeCycleOwner / LifeCycle , tôi cũng khuyên bạn nên xem Biến đổi , nếu bạn muốn thực hiện LiveData
trong các tình huống thực tế. Ở đây bạn có thể tìm thấy một số trường hợp sử dụng từ commonsware tuyệt vời .
Để gói gọn về cơ bảnLiveData
là một cách đơn giảnRXJava
, một cách thanh lịch để quan sát các thay đổi trên nhiều thành phần mà không tạo ra các quy tắc phụ thuộc rõ ràng như vậy giữa các thành phần, để bạn có thể kiểm tra mã dễ dàng hơn nhiều và dễ đọc hơn nhiều. RXJava, cho phép bạn thực hiện những điều của LiveData và nhiều hơn nữa. Do các chức năng mở rộng của RXJava, bạn có thể sử dụng LiveData cho các trường hợp đơn giản hoặc khai thác tất cả sức mạnh của RXJava khi sử dụng các thành phần Kiến trúc Android như ViewModel , tất nhiên điều này có nghĩa làRXJava
có thể phức tạp hơn nhiều, chỉ cần nghĩ rằng có hàng trăm nhà khai thác thay thế của SwitchMap và Bản đồ của LiveData (tại thời điểm này).
RXJava phiên bản 2 là một thư viện đã cách mạng hóa mô hình Hướng đối tượng, thêm một cách gọi là chức năng để quản lý luồng chương trình.