1. 程式人生 > >RxJava2,簡單替換Handler的實現

RxJava2,簡單替換Handler的實現

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。