android handler 簡介


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

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

下面我們做一個小demo對handler有深一步的了解。

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

 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維護一個消息隊列.、

這個demo 進一步告訴我們handler與looper之間的相互聯系.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM