Android Handler 主线程 子线程 双向通信(二)

2014-11-24 11:50:13 · 作者: · 浏览: 7
setContentView(R.layout.main);


info = (TextView) findViewById(R.id.info);
msgBtn = (Button) findViewById(R.id.msgBtn);
btn1 = (Button) findViewById(R.id.button1);


mMainHandler = new Handler() {


@Override
public void handleMessage(Message msg) {
Log.i(TAG, "Got an incoming message from the child thread - "
+ (String) msg.obj);


// 接收子线程的消息
info.setText((String) msg.obj + String.valueOf(nClick));
}


};


child1 = new ChildThread();
child1.start();


child2 = new ChildThread();
child2.start();


msgBtn.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {


if (child1.childHander != null) {


// 发送消息给子线程
Message childMsg = child1.childHander.obtainMessage();
Message msg = new Message();
msg.obj = mMainHandler.getLooper().getThread().getName()
+ " says Hello and msbBtn sending";


child1.childHander.sendMessage(msg);
Log.i(TAG, "Send a message to the child thread - "
+ (String) msg.obj);
}
}
});


btn1.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (child2.childHander != null) {


// 发送消息给子线程
Message childMsg = child2.childHander.obtainMessage();
Message msg = new Message();
msg.obj = mMainHandler.getLooper().getThread().getName()
+ " says Hello and btn1 sending";
child2.childHander.sendMessage(msg);
Log.i(TAG, "Send a message to the child thread - "
+ (String) msg.obj);
}


}


});


}


public void onDestroy() {
super.onDestroy();
Log.i(TAG, "Stop looping the child thread's message queue");


if (child1.childHander != null) {
child1.childHander.getLooper().quit();
}
if (child2.childHander != null) {
child2.childHander.getLooper().quit();
}


}
}