好吧,我是新来的android,我试图创建一个应用程序,通过蓝牙与arduino接口。我已经看到了蓝牙示例,并看到它如何使用处理程序在“服务”,由它产生的线程和MainActivity之间进行通信。 我的问题是我有多个活动需要使用蓝牙服务。 对于每个活动我有一个这样的处理程序:处理程序和多个活动
mHandler = new Handler(){
@Override
public void handleMessage(Message message) {
switch (message.what){
case BtService.CHANGE_STATE:
if (message.arg1 == BtService.STATE_CONNECTING){
Intent i = new Intent (MainActivity.this,ConnectedActivity.class);
startActivity(i);
}
break;
}
}
};
,并在服务的构造我有这样的:
private BtService(){
btm = BluetoothAdapter.getDefaultAdapter();
mHandler= new Handler(Looper.getMainLooper());
}
,当我需要发送一条消息我这样做:
private synchronized void setState(int state){
mHandler.obtainMessage(CHANGE_STATE, state, -1).sendToTarget();
mState = state;
}
但在各种其他处理程序中未收到消息。 在here中声明“特定线程的所有Handler对象都接收相同的消息。”所以我不明白这个问题。 每次开始活动时,我是否都需要传递给Handler在该Activity中声明的服务以使其接收消息?这似乎有效,但对我来说这似乎不是一个好习惯。
很抱歉,如果我没有做我自己很清楚,但是“真实”的问题是:“一个线程的所有处理程序是否都收到相同的消息,正如API培训中所述,或者如果我理解错误是真的。无论如何,谢谢你的回答 – Campig