用 RXJava 替换 Android 处理程序
Replace Android handler with RXJava
在 Activity 中,我有某种用户操作超时。如果用户什么都不做,我需要为系统生成一些其他操作。
为此,我使用 Handler
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();
}
});
但目前我需要处理多种用户操作。所有这些从异步线程和处理程序推送到 stopTimout 看起来都不是正确的决定。
项目我已经迁移到 RXJava 和
我可以弄清楚如何使用 RXJava 完成这部分。
开始计时。
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;
}
}
根据用户操作添加停止计时器 运行。如果在计时器期间没有用户操作,则默认操作。
很简单:
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");
}
在 Activity 中,我有某种用户操作超时。如果用户什么都不做,我需要为系统生成一些其他操作。 为此,我使用 Handler
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();
}
});
但目前我需要处理多种用户操作。所有这些从异步线程和处理程序推送到 stopTimout 看起来都不是正确的决定。 项目我已经迁移到 RXJava 和
我可以弄清楚如何使用 RXJava 完成这部分。
开始计时。
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;
}
}
根据用户操作添加停止计时器 运行。如果在计时器期间没有用户操作,则默认操作。
很简单:
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");
}