zoukankan      html  css  js  c++  java
  • Rxlifecycle(三):坑

    由于rx是从下到上的执行onsubscribe()方法,然后再自上到下的执行subscribe()方法,而rxlifecycle是使用takeUntil方法来停止消息,只能终止当前的上一个onsubscribe()方法的调用,所以顺便不同会出现以下问题

     

    坑1

    复制代码
        Observable.just("hello world!")
                .compose(this.<String>bindUntilEvent(ActivityEvent.PAUSE))
                .flatMap(new Func1<String, Observable<Long>>() {
                    @Override
                    public Observable<Long> call(String s) {
                        return Observable.interval(1, TimeUnit.SECONDS);
                    }
                })
    
                .subscribe(new Action1<Long>() {
                    @Override
                    public void call(Long aLong) {
                        Log.i(TAG, "....oh,oh,no!!..........." + aLong);
                    }
                });
    复制代码

    activity生命周期paused的时候

    Log.i(TAG, "....oh,oh,no!!..........." + aLong); 

    还会执行么??会会...

    如果你想全部都不执行:

    复制代码
    Observable.just("hello world!")
                .flatMap(new Func1<String, Observable<Long>>() {
                    @Override
                    public Observable<Long> call(String s) {
                        return Observable.interval(1, TimeUnit.SECONDS);
                    }
                })
                //fuck....here
                .compose(this.<Long>bindUntilEvent(ActivityEvent.PAUSE))
                .subscribe(new Action1<Long>() {
                    @Override
                    public void call(Long aLong) {
                        Log.i(TAG, "....oh,oh,no!!..........." + aLong);
                    }
                });
    复制代码

    坑2

    复制代码
        Observable.interval(1, TimeUnit.SECONDS)
                .doOnUnsubscribe(new Action0() {
                    @Override
                    public void call() {
                        Log.i(TAG, "Unsubscribing subscription ......");
                    }
                })
                .doOnNext(new Action1<Long>() {
                    @Override
                    public void call(Long aLong) {
                        Log.i(TAG, "........fuck..........." + aLong);
                    }
                })
                .flatMap(new Func1<Long, Observable<String>>() {
                    @Override
                    public Observable<String> call(Long aLong) {
                        return Observable.just(aLong + "");
                    }
                })
                .compose(this.<String>bindUntilEvent(ActivityEvent.PAUSE))
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String num) {
                        Log.i(TAG, "..........shit..........." + num);
                    }
                });
    复制代码

    activity在paused的时候,

    Log.i(TAG, "........fuck..........." + aLong);
    Log.i(TAG, "..........shit..........." + num);

    都不会执行...

    而且会unsubscribe

  • 相关阅读:
    求单源最短路径两顶点最短距离(BFS)
    运用DFS算法解决的图的相关算法应用
    关于图的简单路径,输出、是否存在等总结
    邻接表与邻接矩阵互换
    Weblogic WLS-WebServices组件反序列化漏洞复现
    Android测试(四)——内容供应器泄露
    Android测试(三)——APK文件反编译
    漏洞复现——Apache SSI远程命令执行
    漏洞复现——Apache HTTPD多后缀解析漏洞
    漏洞复现——httpd换行解析漏洞
  • 原文地址:https://www.cnblogs.com/ldq2016/p/8745072.html
Copyright © 2011-2022 走看看