Android,我书中的快速问题

发布于 2024-11-25 22:24:02 字数 903 浏览 0 评论 0原文

我是一个通过书本学习 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 中将鼠标悬停在上面会显示一条听起来像是胡言乱语的消息。
它试图“获取”什么信息?

I am a noob learning Android via a book, i have a quick question. My book code is pretty simple and looks like this:

My handler:

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

My thread:

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 
            } 
          } 
        }); 

My question is here:

handler.sendMessage(handler.obtainMessage());

What the heck is "handler.obtainMessage()" ?
Doing a mouse over in Eclipse gives me a message that sounds like gibberish.
What message is it trying to "obtain"?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青朷 2024-12-02 22:24:02

如文档中所述,它获取消息池中的消息而不是创建新消息。 (无论如何,您需要向处理程序发送消息):

从全局消息池返回一条新消息。更高效
而不是创建和分配新实例。检索到的消息有
它的处理程序设置为此实例(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);

As described in the docs, it obtains a message from the message pool instead of creating a new one. (you need to send a message to the handler anyway):

Returns a new Message from the global message pool. More efficient
than creating and allocating new instances. The retrieved message has
its handler set to this instance (Message.target == this). If you
don't want that facility, just call Message.obtain() instead.

I'll try to elaborate:

You send a message to the handler. The message is added to the handler's thread queue and processed on the original thread. You need to send it a message, though you have nothing specific in the message that it uses (according to your handler code) so you just send an empty message, but instead of allocating a memory for a new message, the message is taken from the message pool, which is faster.

Hope this makes things clearer.

Regarding how to set a message with an int:

Message m = new Message();
Bundle b = new Bundle();
b.putInt("what", 5); // for example
m.setData(b);
handler.sendMessage(m);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文