use*_*386 10 android android-handler
我想制作一个应用程序,例如每隔10秒调用一个函数.
我写了这样的代码:
Handler ha=new Handler();
ha.postDelayed(new Runnable() {
@Override
public void run() {
//call function
}
}, 10000);
Run Code Online (Sandbox Code Playgroud)
但是编译完这段代码后,我的函数在10秒内调用了一次.
我该如何解决?
Rud*_*udi 21
像这样做:
final Handler ha=new Handler();
ha.postDelayed(new Runnable() {
@Override
public void run() {
//call function
ha.postDelayed(this, 10000);
}
}, 10000);
Run Code Online (Sandbox Code Playgroud)
使用的组合Timer和TimerTask这样的:
int delay = 0; // delay for 0 sec.
int period = 10000; // repeat every 10 sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
//Call function
}
}, delay, period);
Run Code Online (Sandbox Code Playgroud)
runOnUiThread()如果要修改UI,请务必使用.
您可以通过添加此依赖项来使用Rx java和Rx Android,如下所示:
//Rx Java
implementation 'io.reactivex.rxjava2:rxjava:2.2.13'
//Rx Android
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
Run Code Online (Sandbox Code Playgroud)
在这里结帐以获得最新版本。
你需要一个像这样的 Observable :
private final Observable etaUpdateRepeatableObservable =
Observable
.interval(ETA_UPDATE_INTERVALS, TimeUnit.MINUTES)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.repeat();
Run Code Online (Sandbox Code Playgroud)
只需更改ETA_UPDATE_INTERVALS为您的特定值即可。
您需要一个Disposable来订阅 observable 并在需要时处置它(如ViewModels上的onCleared())
private Disposable etaUpdateDisposable;
Run Code Online (Sandbox Code Playgroud)
你需要一个消费者,你的重复逻辑会去那里。
private final Consumer etaUpdateConsumer = o -> {
//Here you got the repeated logic
};
Run Code Online (Sandbox Code Playgroud)
现在,您可以在每次需要时订阅(开始重复功能)和处置(停止) 可观察对象。
private void addEtaUpdateDisposable() {
if (etaUpdateDisposable == null) {
etaUpdateDisposable = etaUpdateRepeatableObservable.subscribe(etaUpdateConsumer);
}
}
private void disposeEtaUpdate() {
if (
etaUpdateDisposable != null &&
!etaUpdateDisposable.isDisposed()
) {
etaUpdateDisposable.dispose();
etaUpdateDisposable = null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21955 次 |
| 最近记录: |