主线程和另一个线程互发消息进行处理的例子
来源:互联网 发布:广东房卡麻将源码 编辑:程序博客网 时间:2024/06/05 21:04
主线程和另一个线程互发消息进行处理的例子.这个例子是从别人那里拿来的,依照个人喜好重新命名而已.因此还是转发.
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.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MyHandlerActivity extends Activity{/** Called when the activity is first created. */// 主线程给子线程发送消息Button button3;TextView textView;// 主线程MainActivityHandler mainHandler;// 其它线程MyThreadHandler myThreadHandler;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);button3 = (Button) findViewById(R.id.button3);textView = (TextView) findViewById(R.id.text);button3.setOnClickListener(clickListener);MyThread thread = new MyThread();thread.start();}OnClickListener clickListener = new OnClickListener(){@Overridepublic void onClick(View v){switch (v.getId()){// 主线程给子线程发送消息case R.id.button3:// 在主线程中获取子线程的message对象然后再发送Message msg = myThreadHandler.obtainMessage(1, "这是主线程发送的消息");// msg.obj="这是主线程发送的消息";myThreadHandler.sendMessage(msg);break;default:break;}}};class MainActivityHandler extends Handler{public MainActivityHandler(Looper looper){super(looper);}@Overridepublic void handleMessage(Message msg){super.handleMessage(msg);textView.setText("我是主线程,这是收到的消息:" + msg.obj);}}// //////////////////////////////////////////////////////////////////////////// 以下是其他线程类和他的handler类class MyThread extends Thread{@Overridepublic void run(){super.run();// 创建该线程的Looper对象,用于接收消息Looper.prepare();// 线程的looper创建的handler表示消息接收者是子线程myThreadHandler = new MyThreadHandler(Looper.myLooper());// 循环从MessageQueue中取消息。Looper.loop();}}class MyThreadHandler extends Handler{public MyThreadHandler(Looper looper){super(looper);}@Overridepublic void handleMessage(Message msg){super.handleMessage(msg);// textView.setText("我是子线程,这是收到的消息:" + msg.obj);这里直接操作UI线程的内容是不行的会出错mainHandler = new MainActivityHandler(Looper.getMainLooper());Message message = new Message();message.obj = "子线程收到消息.收到的消息内容是:" + msg.obj;mainHandler.sendMessage(message);}}}
我这里有一个疑问如果我要生成两个这样的MyThread线程应该怎么做呢?这里的消息的分发好像就有问题了.
MyThread thread = new MyThread();thread.start();MyThread thread2 = new MyThread();thread2.start();
这个疑问留着探索.
源程序下载地址:http://download.csdn.net/detail/thanklife/6621969
经过探索,我发现可以实现一个主线程给多个线程发送消息,主线程接收每个线程的内容进行处理
下面是我改造的例子:
package com.boao;import java.util.ArrayList;import java.util.List;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.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MyHandlerActivity extends Activity{/** Called when the activity is first created. */// 主线程给子线程发送消息Button button3;TextView textView;// 主线程MainActivityHandler mainHandler;// 其它线程List<MyThreadHandler> list = new ArrayList<MyHandlerActivity.MyThreadHandler>();@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);button3 = (Button) findViewById(R.id.button3);textView = (TextView) findViewById(R.id.text);button3.setOnClickListener(clickListener);for (int i = 0; i < 10; i++){MyThread thread = new MyThread();thread.start();}}OnClickListener clickListener = new OnClickListener(){@Overridepublic void onClick(View v){switch (v.getId()){// 主线程给子线程发送消息case R.id.button3:// 在主线程中获取子线程的message对象然后再发送for (int i = 0; i < list.size(); i++){MyThreadHandler myThreadHandler = list.get(i);Message msg = myThreadHandler.obtainMessage(1, "这是主线程发送的消息"+ myThreadHandler.toString());// msg.obj="这是主线程发送的消息";myThreadHandler.sendMessage(msg);}break;default:break;}}};class MainActivityHandler extends Handler{public MainActivityHandler(Looper looper){super(looper);}@Overridepublic void handleMessage(Message msg){super.handleMessage(msg);textView.setText("我是主线程,这是收到的消息:" + msg.obj + msg.getWhen());}}// //////////////////////////////////////////////////////////////////////////// 以下是其他线程类和他的handler类class MyThread extends Thread{@Overridepublic void run(){super.run();// 创建该线程的Looper对象,用于接收消息Looper.prepare();// 线程的looper创建的handler表示消息接收者是子线程MyThreadHandler myThreadHandler = new MyThreadHandler(Looper.myLooper());list.add(myThreadHandler);// 循环从MessageQueue中取消息。Looper.loop();}}class MyThreadHandler extends Handler{public MyThreadHandler(Looper looper){super(looper);}@Overridepublic void handleMessage(Message msg){super.handleMessage(msg);// textView.setText("我是子线程,这是收到的消息:" + msg.obj);这里直接操作UI线程的内容是不行的会出错mainHandler = new MainActivityHandler(Looper.getMainLooper());Message message = new Message();message.obj = "子线程收到消息.收到的消息内容是:" + msg.obj;mainHandler.sendMessage(message);}}}
经过测试,发送了10次的消息到各个线程,各个线程也分别各自发来各自的应答信息.
- 主线程和另一个线程互发消息进行处理的例子
- 子线程发消息到主线程进行更新 UI,除了 handler 和 AsyncTask,还有什么?
- android 主线程与子线程互发消息,以及自己给自己发消息
- Android之Handler(主线程,自己线程,其他线程互发消息)
- 【Android】从主线程向子线程发消息
- Android Handler:子线程发消息到UI主线程
- Android主线程发消息给子线程
- 各个线程给主线程发消息避免锁的使用
- android 主线程和子线程之间的消息传递
- android 主线程和子线程之间的消息传递
- android 主线程和子线程之间的消息传递
- android 主线程和子线程之间的消息传递
- android 主线程和子线程之间的消息传递
- 利用Handler在主线程与子线程之间互发消息,handler详解
- 利用Handler在主线程与子线程之间互发消息
- 【原】qt4 子线程给主线程发消息,发数据,通信,qthread gui postevent emit
- qt4 子线程给主线程发消息,发数据,通信,qthread gui postevent emit
- qt4 子线程给主线程发消息,发数据,通信,qthread gui postevent emit .
- spring用aop记录异常日志
- Linux 线程编程
- QQ始祖 IRC 入门教程
- hw 9.19
- 【转】linux 终端 There are still stopped jobs
- 主线程和另一个线程互发消息进行处理的例子
- Hadoop HDFS之SequenceFile和MapFile
- 配置标准访问控制列表------允许指定网段的计算机可以出站访问其它网段的计算机
- VB 子窗体被PictureBox控件挡住无法显示
- Android计算文件的MD5和SHA1
- CentOS 6.0 系统 LAMP(Apache+MySQL+PHP)安装步骤
- vim 学习笔记 一
- 属性和协议
- 驱动层SSDT 隐藏进程