Android-多線程Handler

來源:互聯網
上載者:User

標籤:

http://www.cnblogs.com/plokmju/p/android_Handler.html

 

android不允許在主線程裡做耗時操作,如網路操作,以此來避免ANR

 

ANR(Application Not Responding)

http://baike.baidu.com/link?url=rLzKRNkjt79XITQKhRXp32alhsuKEt2FoHPw3vuB2UlEvyKOZwnEh4OYoPy4_fwO6zPPECXWre4ycip4mB0LOq

Activity應該在它的關鍵生命週期方法(如onCreate()和onResume())裡儘可能少的去做建立操作。潛在的耗時操作,例如網路或資料庫操作,或者高耗時的計算如改變位元影像尺寸,應該在子線程裡(或者以資料庫操作為例,通過非同步請求的方式)來完成。

預設情況下,在android中Activity的最長執行時間是5秒,BroadcastReceiver的最長執行時間則是10秒。

 

因此如果想進行上述的操作,應該開啟一個子線程。而在子線程中,android不允許進行UI操作。如果想在子線程中進行UI操作,就可以使用Handler開啟UI線程。

 

Handler,它直接繼承自Object,一個Handler允許發送和處理Message或者Runnable對象,並且會關聯到主線程的MessageQueue中。每個Handler具有一個單獨的線程,並且關聯到一個訊息佇列的線程,就是說一個Handler有一個固有的訊息佇列。當執行個體化一個Handler的時候,它就承載在一個線程和訊息佇列的線程,這個Handler可以把Message或Runnable壓入到訊息佇列,並且從訊息佇列中取出Message或Runnable,進而操作它們。

 

由上可知,Handler有兩種用法:

  • Post:Post允許把一個Runnable對象入隊到訊息佇列中。它的方法有:post(Runnable)、postAtTime(Runnable,long)、postDelayed(Runnable,long)。
  • sendMessage:sendMessage允許把一個包含訊息資料的Message對象壓入到訊息佇列中。它的方法有:sendEmptyMessage(int)、sendMessage(Message)、sendMessageAtTime(Message,long)、sendMessageDelayed(Message,long)。

 

具體用法可以看第一個連結的文章

 

http://blog.csdn.net/gh102/article/details/7191486

這邊對post的使用更加清晰一點

 

Post和message區別:

http://blog.csdn.net/u013168615/article/details/47024073

 

從源碼中可以看出,post是調用了sendMessageDelayed方法:

public final boolean post(Runnable r)    {       return  sendMessageDelayed(getPostMessage(r), 0);    }

而其中的getPostMessage則是把Runnable r 封裝成一個空Message然後返回

private static Message getPostMessage(Runnable r) {        Message m = Message.obtain();        m.callback = r;        return m;}

 

所以post和message沒有本質區別,只是用法不同而已

handler.post和handler.sendMessage本質上是沒有區別的,都是發送一個訊息到訊息佇列中,而且訊息佇列和handler都是依賴於同一個線程的。

Android-多線程Handler

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.