5

我正在通过一本书学习,它给了我这个例子:

Handler handler=new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
        bar.incrementProgressBy(5); 
    } 
}; 

Thread background=new Thread(new Runnable() { 
    public void run() { 
        try { 
            for (int i=0;i<20 && isRunning.get();i++) { 
                Thread.sleep(500); 
                handler.sendMessage(handler.obtainMessage()); 
            } 
        } catch (Throwable t) { 
            // just end the background thread 
        } 
    } 
}); 

效果很好。但是,在书的后面,它说:

如果您不想对 Message 对象大惊小怪,您还可以将 Runnable 对象传递给 Handler,它将在 Activity UI 线程上运行这些 Runnable 对象。...您可以在任何视图(即任何小部件或容器)上使用相同的方法。这稍微简化了您的代码,因为您可以跳过 Handler 对象。

但是没有给出如何通过Runnable对象执行此操作的示例。有人有例子吗?

4

2 回答 2

5

像这样的东西:

Handler h = new Handler();

Thread background=new Thread(new Runnable() { 
          public void run() { 
            try { 
              for (int i=0;i<20 && isRunning.get();i++) { 
                Thread.sleep(500); 
                handler.post(new Runnable() {
                  public void run() {
                    bar.incrementProgressBy(5);
                  }
                });
              } 
            } 
            catch (Throwable t) { 
              // just end the background thread 
            } 
          } 
        }); 
于 2011-07-24T04:29:28.620 回答
2

根据Handler的 Android 文档:

公共最终布尔帖子(Runnable r)

自:API 级别 1 导致将 Runnable r 添加到消息队列中。可运行对象将在附加此处理程序的线程上运行。参数

r -- 将被执行的 Runnable。退货

如果 Runnable 已成功放入消息队列,则返回 true。失败时返回 false,通常是因为处理消息队列的 looper 正在退出。

于 2011-07-24T04:12:57.063 回答