Android,我的书中的快速问题

时间:2011-07-24 02:59:03

标签: android multithreading messaging

我是一个通过一本书学习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中执行鼠标操作会给我一条听起来像胡言乱语的消息 它试图“获得”的信息是什么?

1 个答案:

答案 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);