如何正确运行后台线程或运行计时器以每1秒更新一次UI?我的意思是当活动暂停时,线程应该暂停,活动恢复的线程或计时器应该恢复,并且每秒钟必须更新UI上的数据。
答案 0 :(得分:1)
您可以使用HandlerThread类创建线程,如下所示:
HandlerThread handlerThread = new HandlerThread("MyHandler");
handlerThread.start();
Looper looper = handlerThread.getLooper();
Handler handler = new Handler(looper);
然后,以这种方式启动您的可运行对象:
handler.postDelayed(() -> {
// runnable code here
// call again thread after 1000 millis
handler.postDelayed(this, 1000);
}, 1000);
与Java中的每个类一样, HandlerThread类继承自具有Object
方法的wait()
类。如果您查看文档,它将显示“导致当前线程等待,直到另一个线程为此对象调用notify()
方法或notifyAll()
方法。”
您应根据活动生命周期(例如在handlerThread.wait()
方法内部)调用onPause()
来暂停线程。请记住,恢复活动后通常在notify()
方法内,在同一线程实例上调用onResume()
。
完成后致电handler.removeCallbacks
:)