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,,,,"); } }