Google Samples MVP + RxJava 官方精簡Demo

前段時間學習了 Google Samples MVP android-architecture todo-mvp/ 瞭解了 MVP 基本使用方法,以及 UseCase 的使用,之後也用在項目當中,確實帶來了一些好處,比如:數據和 UI 拆分,UseCase 執行重用,使用線程池等等,之後瞭解了 RxJava,有必要合併 mvp 使用下,參考官方 Google Samples github todo-mvp-rxjava/ 例子學習並記錄在此。

同步發佈在簡書Google Samples MVP + RxJava 官方精簡Demo

一、MVP

這部分是最最初的知識,在我的另一篇 Google MVP 你也可以運用自如 總結中可以看到對官方MVP demo todo-mvp/ 的精簡代碼,沒有了解過的可以先看看這個,然後跟着代碼自己操練一下就可以了。

二、RxJava

RxJava 的基本用法肯定是要學的,我這裏就不介紹了,之後會寫一篇關於 RxJava 語法的練習,現在就當你已經會使用 RxJava 了。

RxJava語法練習看這裏,後補充。

三、MVP + RxJava

修改主要集中在 Presenter 中,由於使用 rxjava 訂閱的方式,所以接口更改了,去除了 start() 方法,也不再使用 Handler 來回調主線程,也使用 rxAndroid提供的線程調用相關 Api 。

注意:我這裏是把獲取數據的邏輯寫在了 Presenter 中,這是 demo 形式,如果是真是項目肯定是用寫在 Task 中的,這裏就是做一些大概描述。

1、BasePresenter 更改:

public interface BasePresenter {   
    void subscribe();   
    void unsubscribe();
}

2、添加 Observable :

 private void startTask() {
     mSubscriptions.clear();
     Subscription subscription = getObservable().subscribe(getSubscriber());
     mSubscriptions.add(subscription);
 }

private Observable<List<String>> getObservable() {
    return Observable.create(new Observable.OnSubscribe<List<String>>() {
        @Override
        public void call(Subscriber<? super List<String>> subscriber) {
            try {
                Thread.sleep(3000);//模擬一個3秒的加載
            } catch (InterruptedException e) {
                subscriber.onError(e);
            }
            List<String> list = new ArrayList<>();
            for (int i = 0; i < 10; i++) {
                list.add(i + "--");
            }
            subscriber.onNext(list);
            subscriber.onCompleted();
        }
    })
            .subscribeOn(mSchedulerProvider.io())//指定 subscribe() 發生在新的線程
            .observeOn(mSchedulerProvider.ui());// 指定 Subscriber 的回調發生在主線程
}

//處理數據結果以及UI相關操作
 private Subscriber<List<String>> getSubscriber() {
     return new Subscriber<List<String>>() {
         @Override
         public void onStart() {
             super.onStart();
             mView.setLoading(true);//操作UI
         }

         @Override
         public void onCompleted() {
             mView.setLoading(false);//操作UI
         }

         @Override
         public void onError(Throwable e) {
             mView.setLoading(false);//操作UI
         }

         @Override
         public void onNext(List<String> list) {
             mView.show(list);//view接口回調
         }
     };
 }

3、其他:
另外關於 Scheduler 部分,將其中的模式抽象成接口,使用者實現使用即可

public interface BaseSchedulerProvider {

     Scheduler computation();

     Scheduler io();

     Scheduler ui();

     Scheduler newThread();
 }

4、代碼
關於這部分的練習代碼,上傳到了分支 android-architecture-todo-mvp-rxjava 上,有需要的朋友可以下載運行,demo 形式很簡單,使用 mvp+rxjava 顯示一個 list 文本。

四、參考

以下爲編寫過程中參考的資料
android-architecture
todo-mvp
todo-mvp-rxjava/
android-architecture

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章