通过几个例子来了解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);} }