Android中的Handler的post方法詳解

2021-06-28 12:00:23 字數 1363 閱讀 7743

我們都知道handler中的post方法,並且也是經常使用它

handler.post(new runnable()});

用它可以更新乙個元件的內容,我們也知道hanlder中也有乙個handler.sendmessage(message msg)方法,這兩個方法有什麼區別呢?先看一下message類中定義乙個私有的變數:runnable callback;

再來看一下handler.post(runnable callback)方法的原始碼:

public final boolean post(runnable r)

再看一下sendmessagedelayed的原始碼:

public final boolean sendmessagedelayed(message msg, long delaymillis)

return sendmessageattime(msg, systemclock.uptimemillis() + delaymillis);}

這裡面有個關鍵就是方法getpostmessage(r)這個方法,他將runnable轉成乙個message,他內部到底幹了什麼呢?看一下他的原始碼:

private final message getpostmessage(runnable r)

這裡面就是將runnable轉化成乙個message,其他看他的**很簡單,就是先獲取乙個空訊息message.obtain(),然後將message中的callback的值設定成runnable,這時候就了解到了message中的callback的作用了!

同時也了解一下view.post(runnable r)方法的作用:看一下例項**:

final button btn = (button)findviewbyid(r.id.btn);

btn.post(new runnable()

}); }

上面的**就是更新btn中的內容,同樣下面的**也可以達到這種效果:

handler handler = new handler();

final button btn = (button)findviewbyid(r.id.btn);

handler.post(new runnable()

}); }

不同是這個是用handler.post方法,乙個是用view.post方法,現在來看一下view.post方法的源**:

public boolean post(runnable action) else

return handler.post(action);}

方法中主要的功能**就是attachinfo.mhandler,獲取當前執行緒的hanlder,和我們在乙個執行緒中定義乙個handler的效果是一樣的。

**:

Android中的Handle基礎應用一

下面來個例子 public class myhandleactivity extends activity catch interruptedexception e system.out.println sleep over message msg new message bundle b new ...

執行緒的handle和tid

執行緒是cpu分配時間執行任務的最小單位。在linux中,核心並沒有執行緒和程序的概念,所謂執行緒,只是可以和其他兄弟執行緒共享資源的程序。在posix中,pthread create建立執行緒,並將執行緒的handle或者說id傳遞給第乙個引數,在這還是稱其為handle。這個handle與pth...

selenium學習 8 handle的切換

在我們進行測試的過程中,經常會遇到點開超連結開啟另乙個新視窗的情況,即 target blank 這種情況下,如果要在新視窗進行操作,需要將焦點移到新視窗上,本文將介紹這種情況的處理 切換視窗的方法 1 獲取當前頁面視窗的控制代碼 current window handle 2.獲取所有頁面視窗的控...