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