RxJava-RxAndroid

Tại sao lại là RxJava?

Như hầu hết các bài viết trên Internet, có một ví dụ đơn giản về sử dụng AsyncTask.

Khi sử cài đặt AsyncTask handle một tác vụ ngầm, method doInBackground sẽ chạy trên một thread khác UI thread(main thread), sau khi đó sẽ trả kết quả về onPostExcute(), method này chạy trên UI thread. Vấn dề là khi chạy hàm onPostExcute gắn liền với context, khi app bị kill thì AsyncTask vẫn còn gắn reference với context, dễ xảy ra tình trọng memory leak hoặc null pointer(ez hiểu =))).

Nó khá là giống observer pattern, nhưng có sự khác biệt với Observables.

Thành phần chủ yếu của RJ là Observable và Observer(Subscriber). Observable phát ra item, còn Observer sử dụng những item đó. Với mỗi Observer sẽ có 3 phương thức cài đặt sẵn tương ứng:

+ onNext(): gọi mỗi khi Observable phát ra item

+ onComplete(): khi Observable hoàn thành việc phát ra mọi item.

+ onError(): khi Observable gặp lỗi.

Một Observable có thể tạo ra một hoặc nhiều item. Subscriber là một implement của Observer. Observer là một object có thể lấy data từ data source( một Observable) thông qua onNext(). Subscriber là một Observer mà có thể unsubscribe thông qua implement một interface khác đó là Subscription(khác với Observer ở chỗ này).

RxJava cung cấp cho 10 phương thức dể tạo ra Observable:

+ Observable.from(): nếu truyền vào một array thì nó tổng số lần nó phát ra item trong onNext() bằng size của array đó. VD: param là array có size bằng 3 thì Observable sẽ phát ra onNext 3 lần

+ Observable.just(): nếu truyền vào một array thí Observable sẽ phát ra array trong duy nhất một onNext, nó khác với from(). VD: param là array thì phát ra item là array onNext().

+Observable.defer(): Observable chỉ khởi tạo khi có ÍT NHẤT một Subscriber đăng kí với nó. Nó sẽ tạo 1 Observable cho mỗi Subscriber của nó.

+Observable.interval(): phát ra một item trong onNext() kiểu Long sau mỗi n thời gian.

+Observable.create(): cách này làm thủ công