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 线程内完成更新。