最近看看了线程,有点乱,下面是个例子,我自己的理解是这样的:
1、实现了给线程传递参数;
2、实现了多线程;
如有不对请指点;
DEMO:http://download.youkuaiyun.com/detail/small5e4444/9058185
代码:
public class MainActivity extends Activity {
MyThread StartThread;
private Handler handlerThread;
int comRestart=0;
int comJoin=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 开启一个线程
*/
StartThread = new MyThread();
StartThread.start();
}
/**
* MyThread
* @author Administrator
*
*/
class MyThread extends Thread {
public void run() {
System.out.println("线程启动");
//建立消息循环的步骤
Looper.prepare();//1、初始化Looper
handlerThread = new Handler(){//2、绑定handler到CustomThread实例的Looper对象
public void handleMessage (Message msg) {//3、定义处理消息的方法
switch(msg.what) {
case 3://重启
System.out.println("线程收到A的数据--comRestart:"+comRestart);
try {
Thread.sleep(1000);//线程先等待1s,看是否收到了返回值;
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(comRestart<4){//连续执行之前的操作3次
if(comRestart==3){//三次发送都失败啦
/**
* 处理数据
*/
System.out.println("case 3命令--连续3次错误");
}else{
try {
/**
* 线程等待1s的目的是,等待我发送命令后的返回值,如果1秒内收到返回值,那么就停掉这个线程
* 如果1s内没有收到返回值,在这个线程里,连续发送3次之前的命令;
* Demo,用System.out代替了命令
*/
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("comRestart没有收到正确数据,测试发送三次,第"+comRestart+"次");
//原来放了个自定义 发送命令的方法,发送命令
myRestart();
System.out.println("comRestart从新发送第"+comRestart+"次");
}
comRestart++;
}
break;
case 4://允许加入
System.out.println("线程收到A的数据--comJoin:"+comJoin);
try {
Thread.sleep(1000);//线程先等待1s,看是否收到了返回值;
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(comJoin<4){
if(comJoin==3){//三次发送都失败啦
}else{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("comJoin没有收到正确数据,测试发送三次,第"+comJoin+"次");
myjoin();//调用
System.out.println("comJoin从新发送第"+comJoin+"次");
}
comJoin++;
}
break;
}
}
};
Looper.loop();//4、启动消息循环
}
}
public void restart(View v){
myRestart();
//System.out.println("发送第一次命令:RESTART");
/**
* 开启一个线程 判断3秒钟之内是否能收到返回值
*/
comRestart=0;
handlerThread.obtainMessage(3, "restart").sendToTarget();//发送消息到Thread实例
}
public void tojoin(View v){
myjoin();//调用
/**
* 开启一个线程 判断3秒钟之内是否能收到返回值
* 给线程传参数
*/
comJoin=0;
handlerThread.obtainMessage(4, "comJoin").sendToTarget();//发送消息到Thread实例
}
private void myjoin(){
System.out.println("fsd-----发送命令:join");
}
private void myRestart(){
System.out.println("fsd-----发送命令:restart");
}
}
本文介绍如何在Android中通过Handler实现线程间传递参数,并提供了一个简单的DEMO实例,包括多线程的创建和使用。
6938

被折叠的 条评论
为什么被折叠?



