均属于笔记,仅供个人参考,有问题欢迎指正,整理模式
1,主线程处理子线程消息
private Handler MyHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == 1){
String text = (String) msg.obj;
tv.setText(text);
}
}
};
class MyThread extends Thread{
@Override
public void run() {
Message msg = MyHandler.obtainMessage();
msg.what = 1;
msg.obj = getName() + "hello MyHandler";
MyHandler.sendMessage(msg);
}
}
private void sendMesssage() {
MyThread thread = new MyThread();
thread.setName("MyThread_1");
thread.start();
}
private void sendMesssage1() {
new Thread(new Runnable() {
@Override
public void run() {
Message msg = MyHandler.obtainMessage();
msg.what = 1;
msg.obj = Thread.currentThread().getName() + "hello MyHandler1 ...";
MyHandler.sendMessage(msg);
}
}).start();
}
2,子线程处理主线程消息
a,方式1
private Handler mHandler;
class MyThread extends Thread{
public MyThread(String name) {
super(name);
}
@Override
public void run() {
Looper.prepare();
mHandler = new Handler(){
public void handleMessage(Message msg) {
final String text = (String) msg.obj;
Log.d("MyThread",text);
Log.d("MyThread",getName());
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(text);
}
});
}
};
Looper.loop();
}
}
private void init() {
MyThread mythread = new MyThread("MyThread");
mythread.start();
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Message msg = mHandler.obtainMessage();
// Message msg = new Message();
msg.what = 1;
msg.obj = Thread.currentThread().getName()+ ":hello MyThread.....";
mHandler.sendMessage(msg);
}
});
}
b,方式2,HandlerThread
private MyHandlerThread handlerthread;
class MyHandlerThread extends HandlerThread {
private static final String TAG = "MyHandlerThread";
private Handler mHandler;
public MyHandlerThread(String name){
super(name);
}
public Handler getHandler(){
return mHandler;
}
@Override
public void start(){
super.start();
Looper looper = getLooper();
mHandler = new Handler(looper){
@Override
public void handleMessage(Message msg) {
if(msg.what == 1){
final String text = (String) msg.obj;
Log.d(TAG,text);
Log.d(TAG,getName());
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(text);
}
});
}
}
};
}
}
private void init() {
handlerthread = new MyHandlerThread("MyHandlerThread");
handlerthread.start();
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Handler myHandler = handlerthread.getHandler();
Message msg = myHandler.obtainMessage();
// Message msg = new Message();
msg.what = 1;
msg.obj = Thread.currentThread().getName()+ ":hello MyHandlerThread.....";
myHandler.sendMessage(msg);
}
});
}
3,子线程处理其他子线程消息
总体思想就是,不管哪个线程,只要绑定了Looper,就可以监听并处理其对应的Handler发送的消息
private MyThread mythread;
class MyThread extends Thread{
private Handler mHandler;
public MyThread(String name) {
super(name);
}
public Handler getHandler(){
return mHandler;
}
@Override
public void run() {
Looper.prepare();
mHandler = new Handler()
{
public void handleMessage(Message msg) {
final String text = (String) msg.obj;
Log.d("MyThread",text);
Log.d("MyThread",getName());
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(text);
}
});
}
};
Looper.loop();
}
}
private void init() {
mythread = new MyThread("MyThread");
mythread.start();
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
Handler myHandler = mythread.getHandler();
Message msg = myHandler.obtainMessage();
// Message msg = new Message();
msg.what = 1;
msg.obj = Thread.currentThread().getName()+ ":hello MyThread.....";
myHandler.sendMessage(msg);
}
}).start();
}
});
}
网友评论