Android Handler 异步消息机制

来源:互联网 发布:总体国家安全观 知乎 编辑:程序博客网 时间:2024/04/28 23:58
Handler基本概念:
      Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。

Handler 常用方法:
post(Runnable)
        postAtTime(Runnable,long)
        postDelayed(Runnable long)
        sendEmptyMessage(int)
        sendMessage(Message)
        sendMessageAtTime(Message,long)
        sendMessageDelayed(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列中,

        sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.

下面看一下具体代码是怎么实现的:

main.xml文件:

<?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>

Activity:

package com.droidstouc.handler.test;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 异步消息处理机制 * @author Administrator * */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    {                @Override                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);            };    };}


原创粉丝点击