簡體   English   中英

UI線程上的多線程

[英]Multi-threading on UI Thread

我需要實時更新6個圖形。 因此,我為每個圖形創建了一個單獨的隊列,並嘗試使用timer.schedule更新它,但實際上並沒有用。 特別是,如果我評論每個單獨的timer.schedule的調用,而只留下第一個,則它會很好地工作。 但是,即使我添加了第二個timer.schedule(僅限1和2個計時器),它也會凍結。 這是我使用的代碼:

timer_graph1 = new Timer();
timer_graph1.schedule(new Graph1(), 20, 20);
timer_graph2 = new Timer();
timer_graph2.schedule(new Graph2(), 20, 20);
timer_graph3 = new Timer();
timer_graph3.schedule(new Graph3(), 20, 20);
timer_graph4 = new Timer();
timer_graph4.schedule(new Graph4(), 20, 20);
timer_graph5 = new Timer();
timer_graph5.schedule(new Graph5(), 20, 20);
timer_graph6 = new Timer();
timer_graph6.schedule(new Graph6(), 20, 20);

class Graph1 extends TimerTask {

    public void run() {

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //add data to the graph and update
                mChart1.invalidate();
            }
        });

    }
}

//same structure as for Graph1
class Graph2 extends TimerTask {

}

您能否提出這種方法有什么問題?

從您的代碼中,我可以知道您的刷新沒有更新到GUI或您的GUI快速閃爍。

更新GUI的經驗法則是:

  1. 通過單獨的線程在后端更新數據。 如果需要,請使用雙緩沖。
  2. SwingUtilities.invokeLater()調用所有GUI更新,以便在EDT線程中完成更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM