2 回答
TA贡献1829条经验 获得超4个赞
尝试调用 Thread.sleep() 而不是在 hanler 上调用 postDelayed,因为在 doInBackround 方法中,您已经处于后台线程中,并且在短时间内调用 sleep 没有问题
try {
Thread.sleep(250)
//File writing...
}catch (IOException e) {
}catch (InterruptedException e) {
}
TA贡献1784条经验 获得超9个赞
是的,将Handler消息发布到Thread您创建它的那个 - 这意味着您在另一个线程上创建了您的处理程序,其中默认情况下没有设置循环(而在主线程上,默认情况下设置了循环 - 这就是处理程序工作的原因在主线程上创建时立即)。
您可以Timer在将来使用标准 Java来调度操作,此计时器使用自己的线程来执行您的操作,例如:
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
// your action
}
}, your delay);
另一种解决方案是使用 RxJava,但是如果您不熟悉它,则需要一些时间来学习。在另一个线程上运行您的操作的代码示例,在主线程上返回结果并延迟 250 毫秒:
(Kotlin here) Completable.fromAction(object : Action {
override fun run() {
// your action
}
}).subscribeOn(Schedulers.newThread())
.subscribeOn(AndroidSchedulers.mainThread())
.delay(250, TimeUnit.MILLISECONDS)
.subscribe()
AsyncTask 做任何线程通常已经过时了
添加回答
举报