rxjava2打造自己的异步任务的生命周期管理---activity中的简单实现

1.使用,继承BaseActivity在onCreate方法中模拟了一个异步任务如下:

//测试每一秒钟在子线程发射一条数据给观察者,直到触发了activitylifeevent.ondestroy事件,自动释放
        Flowable.interval(1, TimeUnit.SECONDS)
                .compose(AutoLife.mInstance.format(AutoLife.ActivityLifeEvent.onDestroy))
                .subscribe(new Consumer<Long>() {
                    @Override
                    public void accept(Long aLong) throws Exception {
                        System.out.println(aLong);
                    }
                });

2.实现步骤如下,全部加了注释,

     讲一下思路:

       1.创建生命周期事件对应activity的各个生命周期
       2.创建publishsubject对象,rxjava2中的一个类,既可以用作观察者也可以用作订阅者,用它来控制发送生命周期事件和监              听自己发送的事件。
       3.利用compose和FlowableTransformer实现当观察者加载异步任务时subjectControl对象监听自己发送事件与要解除订阅时           的事件一致时结束订阅。

a.创建生命周期管理类如下:

/**
 * activity生命周期控制类
 */
public class AutoLife {
    //对应activity生命周期的事件
    public static enum ActivityLifeEvent{
        onCreate,onStart ,onResume,onPause,onStop,onDestroy
    }
    //用来发送或者接收事件的对象
    private PublishSubject<ActivityLifeEvent> controlSubject = PublishSubject.create();

    //私有化构造,不允许外界创建对象
    private AutoLife(){

    }
    //暴露给外界使用的唯一对象
    public static  AutoLife  mInstance = new AutoLife();

    public PublishSubject<ActivityLifeEvent> getControlSubject() {
        return controlSubject;
    }


    //控制生命周期函数
    private  FlowableTransformer unBind(ActivityLifeEvent finalEvent){
        return new FlowableTransformer() {
            @Override
            public Publisher apply(Flowable flowable) {
                return flowable.takeUntil(controlSubject.filter(new Predicate<ActivityLifeEvent>() {
                    @Override
                    public boolean test(ActivityLifeEvent event) throws Exception {
                        return event==finalEvent;
                    }
                }).toFlowable(BackpressureStrategy.BUFFER));
            }
        };
    }
    //android通用的控制函数,特殊情况下可以使用unBind函数
    public <T>FlowableTransformer<T,T> format(ActivityLifeEvent finalEvent){
        return new FlowableTransformer<T,T>() {
            @Override
            public Publisher<T> apply(Flowable<T> flowable) {
                return flowable.subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .compose(unBind(finalEvent));
            }
        };
    }

3.创建BaseActivity activity与AutoLife中的ActivittyLifeEvent绑定生命周期



public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AutoLife.mInstance.getControlSubject().onNext(AutoLife.ActivityLifeEvent.onCreate);

    }

    @Override
    protected void onStart() {
        super.onStart();
        AutoLife.mInstance.getControlSubject().onNext(AutoLife.ActivityLifeEvent.onStart);
    }

    @Override
    protected void onResume() {
        super.onResume();
        AutoLife.mInstance.getControlSubject().onNext(AutoLife.ActivityLifeEvent.onResume);
    }

    @Override
    protected void onPause() {
        super.onPause();
        AutoLife.mInstance.getControlSubject().onNext(AutoLife.ActivityLifeEvent.onPause);
    }

    @Override
    protected void onStop() {
        super.onStop();
        AutoLife.mInstance.getControlSubject().onNext(AutoLife.ActivityLifeEvent.onStop);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        AutoLife.mInstance.getControlSubject().onNext(AutoLife.ActivityLifeEvent.onDestroy);
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值