我是一个通过一本书学习Android的菜鸟,我有一个简单的问题。我的书代码很简单,看起来像这样:
我的经纪人:
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(1000);
handler.sendMessage(handler.obtainMessage());
}
}
catch (Throwable t) {
// just end the background thread
}
}
});
我的问题在这里:
handler.sendMessage(handler.obtainMessage());
什么是“handler.obtainMessage()”? 在Eclipse中执行鼠标操作会给我一条听起来像胡言乱语的消息 它试图“获得”的信息是什么?
答案 0 :(得分:3)
如上所述in the docs,它从消息池中获取消息,而不是创建新消息。 (无论如何你需要向处理程序发送消息):
从全局消息池返回一条新消息。更高效 而不是创建和分配新实例。检索到的消息有 它的处理程序设置为此实例(Message.target == this)。如果你 不想要那个设施,只需要调用Message.obtain()。
我会试着详细说明:
您向处理程序发送消息。消息将添加到处理程序的线程队列中,并在原始线程上处理。您需要向它发送一条消息,尽管它在其使用的消息中没有任何特定内容(根据您的处理程序代码),因此您只需发送一条空消息,但不是为新消息分配内存,而是从消息池,速度更快。
希望这会让事情更加清晰。
关于如何使用int:
设置消息Message m = new Message();
Bundle b = new Bundle();
b.putInt("what", 5); // for example
m.setData(b);
handler.sendMessage(m);