Android -HandleThread-给线程传参数

最近看看了线程,有点乱,下面是个例子,我自己的理解是这样的:
1、实现了给线程传递参数;
2、实现了多线程;

如有不对请指点;

DEMO:http://download.csdn.net/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)