Tôi không có lý do để sử dụng RxJava trong Android và LiveData từ các thành phần kiến trúc Android. Nó sẽ thực sự hữu ích nếu các usecases và sự khác biệt giữa cả hai được giải thích cùng với ví dụ mẫu ở dạng mã giải thích sự khác biệt giữa cả hai.Khi nào sử dụng RxJava trong Android và khi nào thì sử dụng LiveData từ Android Architectural Components?
Trả lời
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. Khi nào cần sử dụng viewDidLoad và khi nào thì sử dụng awakeFromNib
- 2. Khi nào cần sử dụng socket.io và khi nào thì sử dụng ajax
- 3. Khi nào nên sử dụng Class.isInstance() và khi nào thì sử dụng toán tử instanceof?
- 4. Khi nào thì muốn sử dụng OneTuple?
- 5. android: khi nào sử dụng onStart(), onStop()?
- 6. RxJava và MVP trong ứng dụng Android
- 7. Khi nào nên sử dụng isInstanceOf và khi nào thì sử dụng câu lệnh đối sánh-trường hợp (trong Scala)?
- 8. Khi nào sử dụng HTML5 trong android? khi không sử dụng?
- 9. Khi nào thì sử dụng "với" trong python
- 10. Khi nào tôi nên sử dụng async/await và khi nào thì không?
- 11. Hibernate fetching strategy - khi nào sử dụng "join" và khi nào thì dùng "select"?
- 12. Khi nào sử dụng các thành phần Seaside và khi nào thì sử dụng các đối tượng render đơn giản?
- 13. Khi nào nên sử dụng tệp dimens.xml trong Android?
- 14. Khi nào cần sử dụng và khi nào thì nên nhập khẩu ở Aurelia?
- 15. Khi nào nên sử dụng dịch vụ dữ liệu WCF và khi nào thì không?
- 16. Khi nào sử dụng "mới" và khi nào không sử dụng, trong C++?
- 17. Khi nào thì không nên sử dụng dịch vụ web?
- 18. Khi nào thì sử dụng Thread.Sleep() hợp lý?
- 19. android viewview viewholder. khi nào sử dụng và khi không đến
- 20. Khi nào sử dụng ArrayMap của Android thay vì HashMap?
- 21. Khi nào thì sử dụng các quy ước gọi điện
- 22. Khi nào thì sử dụng bản đồ có ý nghĩa?
- 23. Android: Khi nào sử dụng Dịch vụ so với Singleton?
- 24. Làm thế nào để sử dụng Flowable trong RxJava 2?
- 25. Khi nào sử dụng 'Array.prototype' và khi nào nên sử dụng 'this' trong JavaScript?
- 26. Khi nào sử dụng trình tạo phân tích cú pháp, khi nào thì regex là đủ?
- 27. Khi nào thì từ khóa dễ bay hơi được sử dụng trong C#?
- 28. Khi nào bạn nên sử dụng các bộ điều khiển RESTful trong ứng dụng Rails và khi nào thì bạn không nên sử dụng?
- 29. Làm thế nào và khi nào thì thích hợp sử dụng weakref bằng Python
- 30. Khi nào thì tốt khi sử dụng các hàm lồng nhau trong Python?
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/ –