2016-04-14 69 views
-1

在活动中,我对用户操作有某种超时。如果用户什么都不做,我需要为系统产生一些其他操作。 为此,我现在用的处理器用RXJava替换Android处理程序

protected void stopTimeout() 
{ 
    handler.removeMessages(0); 
} 

private void startTimeout() 
{ 
    stopTimeout(); 
    handler.postDelayed(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      //SOME ACTIONS 
     } 
    }, 180 * 1000L); 
} 

像按钮一些用户操作点击

btnCancel.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View view) 
     { 
      // user actions 
      stopTimeout(); 
     } 
    }); 

但此刻我必须对用户的动作有很多变种,处理器可以被停止。所有这些从异步线程和处理程序中push stopTimout并不是正确的决定。 项目我已经迁移到RXJava和

我可以弄清楚如何用RXJava完成这部分。

+0

建议使用'removeMessagesAndCallbacks(空)'清理处理程序。 – Shark

+0

回调地狱,没有thx,只是从项目中删除了所有这些 –

回答

1

启动计时器。

private void startTimeout() { 
    stopTimeout(); 

    Observable<Long> observable = Observable 
      .timer(getKeepMyOrderOnDisplayTime(), 
        TimeUnit.SECONDS, Schedulers.computation()); 
    cancelOrderSubscription = observable 
      .subscribeOn(Schedulers.computation()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .map(new Func1<Long, MyOrderStorageItem>() { 
       @Override 
       public MyOrderStorageItem call(Long aLong) { 
        return myOrderStorageItem; 
       } 
      }) 
      .subscribe(new Action1<MyOrderStorageItem>() { 
       @Override 
       public void call(final MyOrderStorageItem myOrderStorageItem) { 
        // SOME ACTION with object, I need 
       } 
      }); 
} 

停止计时器。

protected void stopTimeout() { 
    if (cancelOrderSubscription != null) { 
     cancelOrderSubscription.unsubscribe(); 
     cancelOrderSubscription = null; 
    } 
} 

用户操作添加停止计时器运行。如果定时器没有用户操作,默认动作会。

0

其简单:

subscription = Observable.timer(1000, TimeUnit.MILLISECONDS) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(aLong -> whatToDo()); 

private void whatToDo() { 
    System.out.println("Called after 1 second"); 
}