在Activity中,我有一些用户操作超时。如果用户什么都不做,我需要为系统产生一些其他动作。 为此我使用Handler
window.addEventListener("beforeunload", function (event) {
event.returnValue = "Are you sure?";
});
可以停止处理程序以执行某些用户操作,例如按钮
protected void stopTimeout()
{
handler.removeMessages(0);
}
private void startTimeout()
{
stopTimeout();
handler.postDelayed(new Runnable()
{
@Override
public void run()
{
//SOME ACTIONS
}
}, 180 * 1000L);
}
但目前我必须使用许多用户操作变体。所有这些从异步线程和处理程序推送到stopTimout看起来不是正确的决定。 项目我已经迁移到RXJava和
我可以弄清楚如何使用RXJava完成这部分。
答案 0 :(得分: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;
}
}
在用户操作上添加停止计时器运行。如果在计时器时没有用户操作,则默认操作将为。
答案 1 :(得分:1)
简单:
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");
}