通过几个例子来了解Handle Runnable Thread HandleThread的关系.

来源:互联网 发布:淘宝助理怎样删除宝贝 编辑:程序博客网 时间:2024/06/05 15:25
//Handler直接pos Runnable的例子//Handler直接把一个Runnable对象放入消息队列,将会执行Runnable的run方法体//Handler这里可以理解为Handle只是用来发送消息,不过消息有点特别,消息的内容是执行Runnable的run方法体//new Handler();括弧没有指定参数,所以Handler处理消息是在本线程(Activity的main线程)处理.package com.maok.handlertest;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class HandlerTest extends Activity {    /** Called when the activity is first created. */private Button startButton = null;    private Button endButton = null;        Handler handler = new Handler();<strong>    Runnable updataThread = new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("线程消息");handler.postDelayed(updataThread, 3000);}};</strong>        public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                startButton = (Button)findViewById(R.id.button1);        endButton = (Button)findViewById(R.id.button2);                startButton.setOnClickListener(new startButtonListener());        endButton.setOnClickListener(new endButtonListener());                    }    class startButtonListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stub<strong>handler.post(updataThread);</strong>}        }    class endButtonListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stub<strong>handler.removeCallbacks(updataThread);</strong>}        }        }


//复写Handler的handleMessage函数,决定了Handle将如何处理消息;  //复写了handleMessage后便可接受其他地方发过来的消息(一般是在另外线程处理耗时比较高的过程,然后发消息给主线程的Handler,由//handleMessage函数处理UI的更新),例子三就是实现这个功能.  package com.maok.handlertest;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class HandlerTest extends Activity {    /** Called when the activity is first created. */private Button startButton = null;    private Button endButton = null;        Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubSystem.out.println("有消息");switch(msg.arg1){case 101:System.out.println("执行...");break;case 102:break;}super.handleMessage(msg);}        };    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                startButton = (Button)findViewById(R.id.button1);        endButton = (Button)findViewById(R.id.button2);                startButton.setOnClickListener(new startButtonListener());        endButton.setOnClickListener(new endButtonListener());                    }    class startButtonListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubMessage msg = new Message();msg.arg1 = 101;handler.sendMessage(msg);}        }

//创建一个线程来执行Runnable的run方法体.//主线程利用handler.sendMessage()和新线程单方面通信//新线程-->(通知)主线程package com.maok.handlertest;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class HandlerTest extends Activity {    /** Called when the activity is first created. */private Button startButton = null;    private Button endButton = null;        Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubswitch(msg.arg1){case 101:System.out.println("收到线程工作消息..");break;case 102:break;}super.handleMessage(msg);}        };    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                startButton = (Button)findViewById(R.id.button1);        endButton = (Button)findViewById(R.id.button2);                startButton.setOnClickListener(new startButtonListener());        endButton.setOnClickListener(new endButtonListener());                    }    Runnable r = new Runnable(){@Overridepublic void run() {// TODO Auto-generated method stubfor(int i = 0;i < 10;i++){Message msg = new Message();msg.arg1 = 101;System.out.println("线程工作中..." + Thread.currentThread().getId());handler.sendMessage(msg);try {Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}};    class startButtonListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubThread updataThread = new Thread(r);updataThread.start();}    }
//创建一个线程,线程有自带的looper//绑定消息处理到新线程的looper//主线程利用handler.sendMessage()和新线程单方面通信//主线程调用Message msg = new Message();msg.arg1 = 101;handler.sendMessage(msg);----->(通知)新线程//处理过程在新线程处理.//和方法3比起来,这中方法更灵活.package com.maok.handlertest;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.HandlerThread;import android.os.Looper;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class HandlerTest extends Activity {    /** Called when the activity is first created. */private Button startButton = null;    private Button endButton = null;        public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                startButton = (Button)findViewById(R.id.button1);        endButton = (Button)findViewById(R.id.button2);                startButton.setOnClickListener(new startButtonListener());        endButton.setOnClickListener(new endButtonListener());                    }    class myHandler extends Handler{public myHandler() {super();// TODO Auto-generated constructor stub}public myHandler(Looper looper) {super(looper);// TODO Auto-generated constructor stub}@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubswitch(msg.arg1){case 101:System.out.println("处理过程工作在-->" + Thread.currentThread().getId());break;case 102:break;}}        }        class startButtonListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubHandlerThread p = new HandlerThread("updata_Thread");p.start();Handler handler = new myHandler(p.getLooper());Message msg = new Message();msg.arg1 = 101;handler.sendMessage(msg);}    }



原创粉丝点击