我正在通过一本书学习,它给了我这个例子:
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,它将运行那些Runnable 活动UI线程上的对象。 ......你可以使用那些相同的方法 在任何视图(即任何小部件或容器)上。这略微简化了 您的代码,然后您可以跳过Handler对象。
但是没有给出如何通过Runnable
对象执行此操作的示例。有人有例子吗?
答案 0 :(得分:4)
这样的事情:
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
}
}
});
答案 1 :(得分:2)
根据Handler的Android文档:
public final boolean post(Runnable r)
从以下版本开始:API Level 1导致Runnable r被添加到消息中 队列。 runnable将在此处理程序所在的线程上运行 连接。参数
r - 将执行的Runnable。返回
如果Runnable已成功放入消息,则返回true 队列。失败时返回false,通常是因为looper处理 消息队列正在退出。