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

//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(){

		@Override
		public void run() {
			// TODO Auto-generated method stub
			System.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{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			<strong>handler.post(updataThread);</strong>
		}
    	
    }
    class endButtonListener implements OnClickListener{

		@Override
		public 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(){

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			System.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{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Message 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(){

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			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());
        
        
    }
    Runnable r = new Runnable(){

		@Override
		public void run() {
			// TODO Auto-generated method stub
			for(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 block
					e.printStackTrace();
				}
			}
			
		}};
		
    class startButtonListener implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Thread 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
		}

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			switch(msg.arg1){
			
			case 101:
				System.out.println("处理过程工作在-->" + Thread.currentThread().getId());
				break;
			case 102:
				break;
			}
		}
    	
    }
    
    class startButtonListener implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			HandlerThread p = new HandlerThread("updata_Thread");
			p.start();
			Handler handler = new myHandler(p.getLooper());
			Message msg = new Message();
			msg.arg1 = 101;
			handler.sendMessage(msg);
		}
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值