RxJava2,簡單替換Handler的實現
阿新 • • 發佈:2019-01-01
Android中Handler的使用,是很常見的一種,用於子執行緒與主執行緒之間的切換,但如果使用不當,很容易發生記憶體洩漏,網上對於Handler的記憶體洩漏也是方法萬千,本文主要使用RxJava替換專案中Handler的使用
1,匯入RxJava的引用
implementation 'io.reactivex.rxjava2:rxjava:2.0.1' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
由於專案中使用了Lambda,所以使用時,需要添加了JDK8的版本
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
2,在BaseActivity或者BaseFragment中新增一個protected型別的方法這裡且叫msgManagement,並在子類中實現該方法
protected void msgManagement(int what){}
3,在BaseActivity或BaseFragment中新增訊息傳送的方法,這裡也是最主要的
/** * 延時傳送訊息的方法 * @param what 傳送的訊息 * @param delayMillis 需要的延時,毫秒 */ public void sendMsg(int what,long delayMillis){ Observable.timer(delayMillis, TimeUnit.MILLISECONDS) .observeOn(AndroidSchedulers.mainThread()) .doOnComplete(()->msgManagement(what)) .subscribe(); } /** * 傳送不延時的訊息 * @param what傳送的訊息 */ public void sendMsg(int what){ Observable.empty().observeOn(AndroidSchedulers.mainThread()) .doOnComplete(() ->msgManagement(what) ).subscribe(); }
在所有的Activity中發訊息的地方,換成sendMsg方法,針對多個引數,可以新建一個實體類替換方法中的what,在用到的Activity或Fragment中,的msgManagement的方法中接收發送的訊息並進行處理,如果在service中可以直接把sendMsg方法移到所需的類中獨立進行實現,至此,RxJava替換Handler全部完成,當然也可以選擇使用github中的RxBus。