Android Hanlder小例子

1、Handler基本概念:
      Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行处理,也就数说发送消息和接收消息 不是同步处理。 这种机制通常用来处理相对耗时比较长的操作。

2、Handler 常用方法:
        post(Runnable)
        postAtTime(Runnable,long)
        postDelayed(Runnable long)

        sendEmptyMessage(int)
        sendMessage(Message)
        sendMessageAtTime(Message,long)
        sendMessageDelayed(Message,long)
 以上post类方法允许你排列一个Runnable对象到主线程队列中;
 sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新。


布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
	android:id="@+id/txtTest"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="HandlerTest"
    />
    
   
   <Button android:id="@+id/btnTest"  
   	android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="测试"
    />
</LinearLayout>

主函数:

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

/**
 * Android Handler 异步消息处理机制
 *
 */
public class HandlerTestActivity extends Activity {	
	
	private static final String TAG="HandlerTestActivity";
	
	private Button btnTest;
	private TextView  txtTest;
	
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        
        txtTest = (TextView) this.findViewById(R.id.txtTest);
        btnTest= (Button) this.findViewById(R.id.btnTest);
        
        //设置 OnClick 监听器	
        btnTest.setOnClickListener(new BtnTestOnClickListener());
    }
    
    
    
    //点击测试按钮后调用 BtnTestOnClickListener 的 OnClick 方法
    class BtnTestOnClickListener implements OnClickListener
    {
		public void onClick(View v)
		{
		     /*	//把线程对象放到handler的队列中,线程会马上启动执行
			handler.post(thread);
                     */
			
			//启动线程
			thread.start();
			try
			{
				// 为了看到异步效果,我让当前线程停止了2秒钟
				Thread.sleep(2000);
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
			
			Log.i(TAG, "OnClick........");
		}
    	
    }
    
    
   // 定义一个Handler,用来异步处理数据
    Handler handler = new Handler()
    {
    	//相当于jquery $.ajax方法中的 Success:function(){}
    	
    	public void handleMessage(android.os.Message msg) 
    	{
    		// 对线程中 handler 返回的结果进行处理
    		
    		Log.i(TAG, "结果返回,正在处理");
    		if(msg.what ==1)
    		{
    			txtTest.setText("异步处理结果 === Handler ");
    		}
    		
    	};
    };
    
    
    
    Thread thread = new Thread()
    {
    	public void run()
    	{
    		Log.i(TAG, "start Thread");
    		
    		//发送一个空消息到消息队列里面
    		//此方法相当于后台往前台Ajax响应结果,在Java当中,相当于一个Action方法里面out.println(1);
    		handler.sendEmptyMessage(1);
    	};
    };
}


分析:

click   ——》new Thread   ——》sendEmptyMessage(1)   ——》handleMessage;


运行结果:

                                         Android Hanlder小例子_第1张图片                 

你可能感兴趣的:(android,hanlder)