wblyuyang

博客园 首页 新随笔 联系 订阅 管理

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对象到队列中,等待更新.

 

例子运行逻辑:

点击button --- > 启动一条新线程,用来处理数据 ---- >数据处理完毕,通过handler返回 ----- > handler里面接收返回的数据,进行UI更新等处理。

 

package com.example.handlertest;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

    private TextView text;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        text = (TextView)findViewById(R.id.textView);
   }



    //定义一个handler,用来异步处理数据
    Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            System.out.println("结果返回,正在处理....");
            
            if (msg.what == 1) {
                text.setText("异步处理结果是 === handler");
            }
            
        };
    };
    
    
    //新开一条线程,用来异步处理数据,结果通过handler返回
    Thread thread = new Thread(){
        public void run() {
            System.out.println("start thread,,,,");
            
            handler.sendEmptyMessage(1);
        };
    };
    
    
    //点击按钮
    public void StartTest(View v){
        thread.start();
        
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        System.out.println("onClick,,,,");
    }
    
    
    
    
}

 

 

posted on 2014-09-27 10:16  wblyuyang  阅读(3937)  评论(0编辑  收藏  举报