android開發之多線程實現方法概述

來源:互聯網
上載者:User

一、單執行緒模式


當一個程式第一次啟動時,Android會同時啟動一個對應的主線程(Main Thread),主線程主要負責處理與UI相關的事件,如:使用者的按鍵事件,使用者接觸螢幕的事件以及螢幕繪圖事件,並把相關的事件分發到對應的組件進行處理。所以主線程通常又被叫做UI線程。

在開發Android 應用時必須遵守單執行緒模式的原則: Android UI操作並不是安全執行緒的並且這些操作必須在UI線程中執行。

如果在非UI線程中直接操作UI線程,會拋出android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views,這與普通的java程式不同。

由於UI線程負責事件的監聽和繪圖,因此,必須保證UI線程能夠隨時響應使用者的需求,UI線程裡的操作應該向中斷事件那樣短小,費時的操作(如網路連接)需要另開線程,否則,如果UI線程超過5s沒有響應使用者請求,會彈出對話方塊提醒使用者終止應用程式。

如果在新開的線程中需要對UI進行設定,就可能違反單執行緒模式,因此android採用一種複雜的Message Queue機制保證線程間通訊。

Message Queue:
Message Queue是一個訊息佇列,用來存放通過Handler發布的訊息。Android在第一次啟動程式時會預設會為UI thread建立一個關聯的訊息佇列,可以通過Looper.myQueue()得到當前線程的訊息佇列,用來管理程式的一些上層組件,activities,broadcast receivers 等等。你可以在自己的子線程中建立Handler與UI thread通訊。

通過Handler你發行就緒或者處理一個訊息或者是一個Runnable的執行個體。每個Handler都會與唯一的一個線程以及該線程的訊息佇列管理。

Looper扮演著一個Handler和訊息佇列之間通訊橋樑的角色。程式組件首先通過Handler把訊息傳遞給Looper,Looper把訊息放入隊列。Looper也把訊息佇列裡的訊息廣播給所有的Handler,Handler接受到訊息後調用handleMessage進行處理。

 

二、多線程的實現
有以下幾種方式: 

1)Activity.runOnUiThread(Runnable) 

2)View.post(Runnable) ;View.postDelay(Runnable , long) 

3)Handler 

4)AsyncTask 

Android是單執行緒模式,這意味著Android UI操作並不是安全執行緒的並且這些操作必須在UI線程中執行,所以你單純的new一個Thread並且start()是不行的,因為這違背了Android的單執行緒模式。那麼如何用好多線程呢?總結一下: 
事件處理的原則:所有可能耗時的操作都放到其他線程去處理。

 對於第一種方法:

[java] 
activity.runOnUiThread(new Runnable() {                
            @Override  
            public void run() {   
                // TODO Auto-generated method stub    
                int i = 30; 
                textView.setText(""+i+" s"); 
                } 
            }   
        });   

activity.runOnUiThread(new Runnable() {              
            @Override
            public void run() { 
                // TODO Auto-generated method stub 
             int i = 30;
             textView.setText(""+i+" s");
             }
            } 
        });  第2,3種方法網路上資料較多,不再贅述。第4種方法在上一篇博文中已經介紹。

三、總結:

1)android系統是單線程系統,為了實現多線程的效果,採用了message queue。

2)為實現多線程,可採用runOnUiThread,post,handle,AsyncTask技術實現。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.