package test.message;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button btnTest;
private TextView textView;
private Handler handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnTest = (Button) this.findViewById(R.id.btn_01);
textView = (TextView) this.findViewById(R.id.view_01);
btnTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// 可以看出这里启动了一个线程来操作消息的封装和发送的工作
// 这样原来主线程的发送就变成了其他线程的发送,简单吧?呵呵
new MyThread().start();
}
});
}
class MyHandler extends Handler {
public MyHandler(Looper looper) {
super(looper);
}
public void handleMessage(Message msg) {
super.handleMessage(msg);
textView.setText("我是主线程的Handler,收到了消息:" + (String) msg.obj);
}
}
// 加了一个线程类
class MyThread extends Thread {
public void run() {
Looper looper = Looper.getMainLooper(); // 主线程的Looper对象
// 这里以主线程的Looper对象创建了handler,
// 所以,这个handler发送的Message会被传递给主线程的MessageQueue。
handler = new MyHandler(looper);
// 构建Message对象
// 第一个参数:是自己指定的message代号,方便在handler选择性地接收
// 第二三个参数没有什么意义
// 第四个参数需要封装的对象
Message msg = handler.obtainMessage(1, 1, 1, "其他线程发消息了");
handler.sendMessage(msg); // 发送消息
}
}
}