我是初学者并试图了解BluetoothChat源代码。在BluetoothChatService中,我遇到了一些需要理解的问题。
public static final int STATE_NONE = 0; // we're doing nothing
public static final int STATE_LISTEN = 1; // now listening for incoming connections
mState = STATE_NONE;
private synchronized void setState(int state) {
if (D) Log.d(TAG, "setState() " + mState + " -> " + state);
mState = state;
// Give the new state to the Handler so the UI Activity can update
mHandler.obtainMessage(BluetoothChat.MESSAGE_STATE_CHANGE, state, -1).sendToTarget();
}
当我允许我的蓝牙打开然后在logcat中显示"setState() 0 -> 1"
。但我无法理解状态如何变为“1”?
在android官方网站上,我发现obtainMessage是一个方法,它包含3个参数,如 - obtainMessage(int what, int arg1, int arg2)
任何人都可以解释一下这个获取消息是如何工作的吗?
JavaExperts需要您的帮助才能理解上述内容。
答案 0 :(得分:0)
了解: 例如,您的main thread
中有一个处理程序Handler uiHandler;
并且在您拥有的onCreate(BundlesavedInstanceState)内部
uiHandler=new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
}
}
我们知道ui线程或应用程序的主线程 具有Looper.prepare() and Looper.loop()
的内在机制我们不需要像其他线程那样做 而且我们还有另一个带有工作线程的类(用户 定义的线程)
public class MyThread {
Thread thread=new Thread(new
Runnable(){
@Override
public void run(){
Message
message=uiHandler.obtainMessage();
///
///
uiHandler.sendMessage(message);
}
}).start();
}
在上面的代码中uiHandler.obtainMessage()的目的 是我们知道ui线程与 消息队列。向该消息队列发送消息 我们需要该消息队列中单元的地址。
uiHandler.obtainMessage();/*takes an
address of that cell(Message object) and
gives that to message.*/
最后
uiHandler.sendMessage(message) /*sends the
message to message queue.*/
尝试与此相关联的查询并进行访问 this website 希望这会有所帮助