轉載請註明出處:http://www.blog.csdn.net/zhyxuexijava/article/details/51597230.comjava
前段時間看了MVP架構和RxJava,最近也在重構一些項目(MVC架構),因而寫一個簡單的例子,好了,廢很少說了,入坑開始。android
一.RxJava是什麼?git
GitHub([https://github.com/ReactiveX/RxJava])(https://github.com/ReactiveX/RxJava)上是這樣解釋的:
RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.github
RxJava是一個在Java虛擬機上的Reactive擴展程序:在Java虛擬機上使用可觀測的序列來組成異步的,基於事件的程序的庫。服務器
簡單的說:RxJava其實能夠理解爲一個普通的Java庫。它的本質就是異步。網絡
二.爲何要使用RxJava架構
兩個字:簡潔。它的異步調用隨着程序邏輯變得愈來愈複雜,它的鏈式調用依然可以保持簡潔。app
三.API介紹和原理解析框架
1.概念
RxJava 的異步實現,是經過一種擴展的觀察者模式來實現的。從純Java的觀點來看,RxJava Observable類源自於經典的觀察者模式。
它添加了三個缺乏的功能:異步
那麼咱們何時使用觀察者模式(題外話)?
RxJava的觀察者模式:
Observable (被觀察者)、 Observer (觀察者)、 subscribe (訂閱)。Observable 和 Observer 經過 subscribe() 方法實現訂閱關係,從而 Observable 能夠在須要的時候發出事件來通知 Observer。
RxJava的回調方法主要有三個,onNext(),onError(),onCompleted()。
4.實踐
下面舉個例子:
package com.test.rxjava; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import rx.Observable; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; public class MainActivity extends AppCompatActivity { @Bind(R.id.tv_show) TextView tvShow; @Bind(R.id.btnChange) Button btnChange; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @Override protected void onDestroy() { super.onDestroy(); ButterKnife.unbind(this); } @OnClick({R.id.btnChange}) public void click(View v){ changeView(); //改變TextView的內容,初始值爲Hello wORLD } private void changeView() { /**,被觀察者**/ Observable<String> myObservable = Observable.create( new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("Hello Reactive Android!!"); subscriber.onCompleted(); } } ); /**接觀察者**/ Subscriber<String> mySubscriber = new Subscriber<String>() { @Override public void onCompleted() { Toast.makeText(MainActivity.this, "更換內容成功", Toast.LENGTH_SHORT).show(); } @Override public void onError(Throwable e) { Toast.makeText(MainActivity.this, "更換內容失敗", Toast.LENGTH_SHORT).show(); } @Override public void onNext(String s) { Log.d("danxx", "onNext--->" + s); tvShow.setText(s.toString()); } }; /**訂閱事件**/ myObservable.observeOn(AndroidSchedulers.mainThread()).subscribe(mySubscriber); } }
在builde.gradle中的配置配置:
運行結果:
說明:1.observeOn(AndroidSchedulers.mainThread())主要是因爲android必須在主線程中更新UI 2.本例中用了ButterKnife。