线程间通信的问题
来源:互联网 发布:弹珠汽水淘宝 编辑:程序博客网 时间:2024/04/29 16:46
一、解决线程间通信的问题:异步消息处理机制:
第一种情况:匿名内部类实现接口,直接在主线程中复写run()方法;
1、在主线程方法外创建Handler类的对象,利用匿名类的形式,并复写其handleMessage()方法;
2、在主线程中开启新的线程,在新的线程里,利用Message对象,携带处理后的信息,用handler对象调用其sendMessage()方法,将Message对象发送出去;
new Thread(new Runnable(){
@Override
public void run() {
Message message = new Message();
message.what = UPDATE_TEXT;
handler.sendMessage(message);
Log.d("---->","wowoowowoowowo");
}
}).start();
3、在复写的handleMessage()方法中,根据返回消息的结果进行相应的处理;
private Handlerhandler = newHandler(){
public void handleMessage(Message msg) {
Log.d("------>","handler外");
switch (msg.what) {
caseUPDATE_TEXT:
Log.d("------>","handler内");
text.setText("Nice to meet you");
Toast.makeText(getApplicationContext(),"hahaha", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
};
第二种情况:新建一个MyThread类,实现Runnable接口,然后再复写run()方法;
public class MyThread implements Runnable{
@Override
public void run() {
Message message = new Message();
message.what = MainActivity.UPDATE_TEXTTWO;
MainActivity.handler.sendMessage(message);
}
}
在主线程中,handler应改为静态,而在复写的handleMessage()方法中,涉及到的控件对象,也应改为静态,因为hanler为静态:
private static TextView text; //此处控件对象为静态,才能在静态的handler中使用;
protected static Handler handler = newHandler(){
public voidhandleMessage(Message msg) {
switch (msg.what) {
case UPDATE_TEXT:
text.setText("Nice tomeet you");
break;
case UPDATE_TEXTTWO:
text.setText("Nice tomeet ps");
break;
default:
break;
}
}
};
- 线程间的通信问题
- 线程间通信的问题
- Android的线程间的通信问题
- 线程及 进程间的通信问题!
- 线程间通信问题的解决
- 线程和 进程间的通信问题
- 线程间通信的问题:使用AsyncTask:
- Java的线程通信问题
- JAVA线程间通信问题
- JAVA线程间通信问题
- 线程间通信问题学习
- 线程间通信问题学习
- 线程间的通信
- 线程间的通信
- 线程间的通信
- 线程间的通信
- 线程间的通信
- 线程间的通信
- 两种网络协议的比较(TCP&UDP)
- JSF参数传递方式之f:param标签和f:attribute区别
- 我为什么烧钱让孩子上全英语幼儿园
- 关于RStudio3.2.2 安装包失败
- Loan Amortization Application in WPF using VC++
- 线程间通信的问题
- easyui datagrid 单击事件和双击事件
- 自定义适配器接口的使用
- qtech 第一次个人赛题解
- 字符整型指针
- Apache与Nginx网络模型
- iOS9 HTTP 不能正常使用的解决办法
- 给 Android 开发者的 RxJava 详解
- 看论文学算法---退火算法