2017-09-20 20 views

Trả lời

20

Android LiveData là một biến thể của mẫu quan sát ban đầu, với việc bổ sung các chuyển tiếp đang hoạt động/không hoạt động. Như vậy, nó rất hạn chế trong phạm vi của nó.

Sử dụng ví dụ được mô tả trong Android LiveData, một lớp được tạo để theo dõi dữ liệu vị trí và đăng ký và hủy đăng ký dựa trên trạng thái ứng dụng.

RxJava cung cấp các toán tử tổng quát hơn nhiều. Giả sử rằng quan sát này sẽ cung cấp dữ liệu vị trí:

Observable<LocationData> locationObservable; 

Việc thực hiện quan sát được có thể được xây dựng bằng cách sử dụng Observable.create() để lập bản đồ cuộc gọi trở lại hoạt động. Khi có thể quan sát được đăng ký, cuộc gọi lại được đăng ký và khi nó được hủy đăng ký, cuộc gọi lại không được đăng ký. Việc triển khai trông rất giống với mã được cung cấp trong ví dụ.

Chúng ta hãy cũng giả định rằng bạn có một quan sát được phát ra đúng khi ứng dụng đang hoạt động:

Observable<Boolean> isActive; 

Sau đó, bạn có thể cung cấp tất cả các chức năng của LiveData bởi

Observable<LocationData> liveLocation = 
    isActive 
    .switchMap(active -> active ? locationObservable : Observable.never()); 

Nhà điều hành switchMap() sau sẽ cung cấp vị trí hiện tại dưới dạng luồng hoặc không có gì nếu ứng dụng không hoạt động. Một khi bạn có liveLocation quan sát được, có rất nhiều thứ bạn có thể làm với nó bằng cách sử dụng các toán tử RxJava. Ví dụ yêu thích của tôi là:

liveLocation.distinctUntilChanged() 
    .filter(location -> isLocationInAreaOfInterest(location)) 
    .subscribe(location -> doSomethingWithNewLocation(location)); 

Điều đó sẽ chỉ thực hiện tác vụ khi vị trí thay đổi và vị trí thú vị. Bạn có thể tạo các hoạt động tương tự mà kết hợp các toán tử thời gian để xác định tốc độ. Quan trọng hơn, bạn có thể cung cấp kiểm soát chi tiết về việc liệu các hoạt động có xảy ra trong luồng chính hay một luồng nền hay một luồng nhiều, bằng cách sử dụng các toán tử RxJava.

Điểm của RxJava là nó kết hợp điều khiển và thời gian vào một vũ trụ duy nhất, sử dụng các hoạt động được cung cấp từ thư viện hoặc thậm chí các hoạt động tùy chỉnh mà bạn cung cấp.

Địa chỉ LiveData chỉ là một phần nhỏ của vũ trụ đó, tương đương với việc xây dựng liveLocation.

+1

Cảm ơn, tài liệu LiveData dường như không tham chiếu đến mẫu vị trí nữa. Có nhiều điểm thú vị hơn (với mẫu vị trí) tại đây: http://androidkt.com/livedata/ –

Các vấn đề liên quan