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 做任何線程通常已經過時了
添加回答
舉報