- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在线程、 View 或 Activity 之间发送消息时,有两种看似相同的方法。
第一个,也是对我来说最直观的,是 obtain
一个Message
, 然后使用 Handler
的 sendMessage
方法:
Message msgNextLevel = Message.obtain();
msgNextLevel.what = m.what;
mParentHandler.sendMessage(msgNextLevel);
或者,您可以获取
提供Handler
的消息,然后使用Message
的sendToTarget
方法:
Message msg = Message.obtain(parentHandler);
msg.what = 'foo';
msg.sendToTarget();
为什么存在这两种实现同一件事的方法?他们的行为是否不同?
最佳答案
如果您检查来自 here 的 Message.java 代码示例你会看到
//Sends this Message to the Handler specified by getTarget().
public void sendToTarget() {
target.sendMessage(this);
}
换句话说,sendToTarget()
将使用先前指定的Handler
并调用其sendMessage()
如果您查找 obtain()
方法,您将看到:
public static Message obtain() {
synchronized (sPoolSync) {
if (sPool != null) {
Message m = sPool;
sPool = m.next;
m.next = null;
m.flags = 0; // clear in-use flag
sPoolSize--;
return m;
}
}
return new Message();
}
提供的解释也很好:
Return a new Message instance from the global pool. Allows us to avoid allocating new objects in many cases.
对 obtain(Handler h)
做同样的事情:
public static Message obtain(Handler h) {
Message m = obtain();
m.target = h;
return m;
}
您可以确认 obtain(Handler h)
确实是 obtain()
添加了设置目标 Handler
Same as obtain(), but sets the value for the target member on the Message returned.
还有其他几个重载,只需检查Message.java并搜索“获取”
获取(消息来源)
获取(Handler h,Runnable 回调)
获取(Handler h, int what)
获取(Handler h, int what, Object obj)
获取(处理程序 h,int what,int arg1,int arg2)
获取(Handler h,int what,int arg1,int arg2,Object obj)
希望这对您有所帮助,干杯!
关于android - sendToTarget 和 sendMessage 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39847192/
我正在尝试将 QFJ 集成到单线程应用程序中。起初我试图将 QFJ 与我自己的 TCP 层一起使用,但我无法解决这个问题。现在我只是想整合一个启动器。根据我对 QFJ 的研究,我认为整体设计应该如下:
在 c++ quickfix 服务器应用程序中,有没有一种方法可以在目标 session 未登录时调用 sendToTarget,这样当客户端可能稍后登录时,它将获得自登录以来“发送”的所有消息? 最
在线程、 View 或 Activity 之间发送消息时,有两种看似相同的方法。 第一个,也是对我来说最直观的,是 obtain一个Message , 然后使用 Handler的 sendMessag
我正在努力使蓝牙聊天示例与远程服务而不是本地服务一起使用(以供以后使用)。 但是当我尝试使用用于显示发送和接收的消息的处理程序时,会发生错误,我不知道如何修复: mHandler.obtainMess
我有以下代码可以使用,但我只是不明白它是如何工作的,首先请引用以下链接 http://developer.android.com/reference/android/os/Message.html#s
我是一名优秀的程序员,十分优秀!