public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//点击mButton子线程发消息给主线程,mButton2主线程发消息给子线程
private static final String TAG = "MainActivity";
private Button mButton;
private Button mButton2;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
mButton.setText(msg.obj.toString()); //根据子线程发过来的消息更改按钮上的文字
break;
}
};
private Handler mHandler2;
@Override
protected void onCreate(Bundle savedInstanceState) {
mButton2 = (Button) findViewById(R.id.button2);
mButton.setOnClickListener(this);
mButton2.setOnClickListener(this);
//开启子线程接收主线程发送的消息
new MyThread().start();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
Message message = new Message();
message.what = 1;
message.obj = "改变后的文字";
mHandler.sendMessage(message);
break;
case R.id.button2:
Log.d("Test", "MainThread is ready to send msg:" );
mHandler2.obtainMessage(0,"这是主线程handler发送给子线程的").sendToTarget();
break;
}
}
class MyThread extends Thread{
@Override
public void run() {
//建立消息循环的步骤
Looper.prepare();//1、初始化Looper
mHandler2 = new Handler(){ //2、绑定handler到CustomThread实例的Looper对象
@Override
public void handleMessage(Message msg) { //3、定义处理消息的方法
switch(msg.what) {
case 0:
Log.d("Test", "MyThread receive msg:" + msg.obj.toString()); //看log,看收到主线程的消息没有
}
}
};
Looper.loop(); //4、启动消息循环
}
}
}
//点击mButton子线程发消息给主线程,mButton2主线程发消息给子线程
private static final String TAG = "MainActivity";
private Button mButton;
private Button mButton2;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
mButton.setText(msg.obj.toString()); //根据子线程发过来的消息更改按钮上的文字
break;
default:
break;
}}
};
private Handler mHandler2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.button);mButton2 = (Button) findViewById(R.id.button2);
mButton.setOnClickListener(this);
mButton2.setOnClickListener(this);
//开启子线程接收主线程发送的消息
new MyThread().start();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
Message message = new Message();
message.what = 1;
message.obj = "改变后的文字";
mHandler.sendMessage(message);
break;
case R.id.button2:
Log.d("Test", "MainThread is ready to send msg:" );
mHandler2.obtainMessage(0,"这是主线程handler发送给子线程的").sendToTarget();
break;
}
}
class MyThread extends Thread{
@Override
public void run() {
//建立消息循环的步骤
Looper.prepare();//1、初始化Looper
mHandler2 = new Handler(){ //2、绑定handler到CustomThread实例的Looper对象
@Override
public void handleMessage(Message msg) { //3、定义处理消息的方法
switch(msg.what) {
case 0:
Log.d("Test", "MyThread receive msg:" + msg.obj.toString()); //看log,看收到主线程的消息没有
}
}
};
Looper.loop(); //4、启动消息循环
}
}
}