rxJava监视任务直到完成

时间:2015-10-26 15:37:25

标签: android rx-java dagger-2

这是我试图用我的Android应用程序中的rxJava和Dagger2解决的用例。

  1. 加载录制详细信息
  2. 检查后端服务器是否存在HLS转码(REST呼叫)
    • 如果存在,则监视直到进程为100%(每隔n秒进行一次REST呼叫,直到100%)
    • 如果不存在,请不要调用监控进程
  3. REST调用通过匕首组件注入。我正在努力设置rxJava来创建一个监视器,它将刷新REST调用,直到进程为100%并停止,或者用户只是退出屏幕。

    我不确定我是否以正确的方式提出这个问题,所以如果需要更新,请告诉我。

    以下是github repo上我的演示者的链接。这会加载数据并需要将更新触发回负责显示数据的片段。

    更新时间:2015-10-26 PM 我知道这可能是一个黑客攻击,但这就是我实现重复延迟调用的方式:

    @Override
    protected Observable buildUseCaseObservable() {
    
        Action1<List<LiveStreamInfo>> onNextAction = new Action1<List<LiveStreamInfo>>() {
    
            @Override
            public void call( List<LiveStreamInfo> liveStreamInfos ) {
    
                try {
                    Thread.sleep( 5000 );
                } catch( InterruptedException e ) { }
    
            }
    
        };
    
        return this.contentRepository.liveStreamInfos( this.filename )
                .repeat( Schedulers.io() )
                .doOnNext( onNextAction );
    }
    

    然后,在建立subriber的调用方法中:

    private void getProgramDetails() {
    
        this.getProgramDetailsUseCase.execute(new ProgramDetailsSubscriber());
    
    }
    

    订阅者:

    private final class LiveStreamInfosListSubscriber extends DefaultSubscriber<List<LiveStreamInfo>> {
    
        @Override
        public void onCompleted() {
            ...
        }
    
        @Override
        public void onError( Throwable e ) {
            ...
        }
    
        @Override
        public void onNext( List<LiveStreamInfo> liveStreamInfos ) {
    
            if( null != liveStreamInfos && !liveStreamInfos.isEmpty() ) {
    
                ProgramDetailsPresenter.this.showLiveStreamDetailsInView( liveStreamInfos.get( 0 ) );
    
                if( liveStreamInfos.get( 0 ).getPercentComplete() == 100 ) {
    
                    ProgramDetailsPresenter.this.getLiveStreamsListUseCase.unsubscribe();
    
                }
    
            }
    
        }
    
    }
    

    一旦完成百分比达到100%,订阅者将取消订阅可观察量,取消所有未来的通话。这样做的好处是,当用户从应用程序内部启动转码,创建实时流,或者从后端接收它时,该订户会从后端Web界面启动。

1 个答案:

答案 0 :(得分:0)

如何添加.retry()以及重试次数和rx观察者重试次数的大值。然后在退出片段时取消订阅源可观察量以停止轮询。