android handler 簡介

android的handler 是一個神奇東西,處理異步消息的時候,咱們離不開他.那麼他的具體的介紹是什麼了?android

Handler基本概念:
      Handler主要用於異步消息的處理:當發出一個消息以後,首先進入一個消息隊列,發送消息的函數即刻返回,而另一個部分逐個的在消息隊列中將消息取出,而後對消息進行出來,就是發送消息和接收消息不是同步的處理。 這種機制一般用來處理相對耗時比較長的操做。web

對於handler的經常使用的一些方法有:app

 post(Runnable)
        postAtTime(Runnable,long)
        postDelayed(Runnable long)
        sendEmptyMessage(int)
        sendMessage(Message)
        sendMessageAtTime(Message,long)
        sendMessageDelayed(Message,long)異步

以上post類方法容許你排列一個Runnable對象到主線程隊列中,
 sendMessage類方法, 容許你安排一個帶數據的Message對象到隊列中,等待更新.ide

下面咱們作一個小demo對handler有深一步的瞭解。函數

基本的業務描述是這樣的:咱們要作一個耗時的操做,要將新的runnable接口放到主程隊列中。相應的源代碼以下:oop

 1 package com.mp;  
 2 import android.app.Activity;  
 3 import android.os.Bundle;  
 4 import android.os.Handler;  
 5 public class MyThread extends Activity {  
 6     private Handler handler = new Handler();  
 7     @Override  
 8     public void onCreate(Bundle savedInstanceState) {  
 9         super.onCreate(savedInstanceState);  
10         handler.post(new MyRunnable());     
11         System.out.println("Oncreate---The Thread id is :"  
12                 + Thread.currentThread().getId());  
13         setContentView(R.layout.main);  
14     }  
15     private class MyRunnable implements Runnable {  
16         public void run() {  
17             System.out.println("Runnable---The Thread is running");  
18             System.out.println("Runnable---The Thread id is :"  
19                     + Thread.currentThread().getId());  
20             try {  
21                 Thread.sleep(6000);  
22             } catch (InterruptedException e) {  
23                 // TODO Auto-generated catch block  
24                 e.printStackTrace();  
25             }  
26         }  
27     }  
28 }  

 

在這個demo中,整個過程以下:
程序已啓動,就把MyRunnable加入到消息隊列中,android的handler是異步機制,因此在handler.post(new MyRunnable());  以後,程序會繼續執行,因此之後的語句會繼續,這時候咱們輸出Oncreate中的當前線程ID。同時MyRunnable的run方法也在運行,同樣輸出run方法中的當前線程ID,而後讓線程休眠6秒。
demo的結果分析:
1:控制檯的輸出: Oncreate---The Thread id is :1
                              Runnable---The Thread is running
                              Runnable---The Thread id is :1
2:程序啓動後6秒,咱們纔看到main.xml中的內容(只有一個textview)

這2個結果都代表handler和主線程是同一個線程。若是這時候你作的是一個耗時的操做(好比下載),那麼這樣是不可行的。
因而,android給咱們提供了Looper這樣一個類。其實Android中每個Thread都跟着一個Looper,Looper能夠幫助Thread維護一個消息隊列.、post

這個demo 進一步告訴咱們handler與looper之間的相互聯繫. spa

相關文章
相關標籤/搜索