1. 用handler+timer+timeTask方法:
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
//do something
}
super.handleMessage(msg);
}
};
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
//主线程中调用:
timer.schedule(timerTask, 1000, 500);//延时1s,每隔500毫秒执行一次run方法
// 最后需要在满足一定条件后执行 timer.cancel(), timer == null, 防止内存泄漏
2. timer+timeTask+handler.post
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
MyApplication.getUiHandler().post(new Runnable() {
@Override
public void run() {
// do something
}
});
}
}, 0, 1000);
// 最后需要在满足一定条件后执行 timer.cancel(), timer == null, 防止内存泄漏
3. 使用线程池
ScheduledFuture<*>? mFuture = Executors.newSingleThreadScheduledExecutor().scheduleWithFixedDelay({
ViewUtils.runOnUiThread {
// do something
}
}, 1000, 1000, TimeUnit.MILLISECONDS)
// 最后记得销毁
mFuture?.run {
if (!isCancelled) cancel(true)
null
}
4. 使用Observable.interval
Observable.interval(CHECK_STATE_CODE_TIME, TimeUnit.MILLISECONDS)
.compose(RxUtil.ioThreadToMainThread())
.subscribe(object : Observer<Long> {
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: Long) {
// do something
}
override fun onError(e: Throwable) {
}
override fun onComplete() {
}
})
5. 使用线程池
val scheduledExecutorService = Executors.newScheduledThreadPool(10)
scheduledExecutorService.schedule({
}, 200, TimeUnit.MILLISECONDS)