安卓 Handler 腦圖

Handler 是結(jié)合線程的消息隊列來發(fā)送漩蟆、處理 Message 對象和 Runnable 對象的一種工具额衙。它在創(chuàng)建時就與一個線程相關(guān)聯(lián),所有發(fā)送給它的消息都會在這個線程中處理。它本質(zhì)上是一種工具谭企,用來簡化消息隊列和消息循環(huán)的使用倔毙,也就是隱藏 LooperMessageQueue 的實現(xiàn)細節(jié)埃仪。

腦圖 Handler

百度腦圖

最后附上一個預(yù)防內(nèi)部 Handler 內(nèi)存泄漏的工具類,幾年前寫的陕赃,代碼已上線多年可直接使用卵蛉。

import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.annotation.NonNull;

import java.lang.ref.WeakReference;

public abstract class WeakReferenceHandler<T> extends Handler {
    private WeakReference<T> ref;

    public WeakReferenceHandler(T t) {
        super();
        ref = new WeakReference<>(t);
    }

    public WeakReferenceHandler(Callback callback, T t) {
        super(callback);
        ref = new WeakReference<>(t);
    }

    public WeakReferenceHandler(Looper looper, T t) {
        super(looper);
        ref = new WeakReference<>(t);
    }

    public WeakReferenceHandler(Looper looper, Callback callback, T t) {
        super(looper, callback);
        ref = new WeakReference<>(t);
    }

    protected T get() {
        return ref.get();
    }

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        T t = get();
        if (t != null) {
            onHandleMessage(msg, t);
        }
    }

    public abstract void onHandleMessage(Message msg, @NonNull T t);
}

說是預(yù)防,其實就是使用 WeakReference 時比較方便么库,使用的時候還是要記住應(yīng)該用靜態(tài)內(nèi)部類來繼承傻丝,否則就沒有意義了。
用法

  1. 創(chuàng)建一個static內(nèi)部類诉儒,繼承 WeakReferenceHandler 并將泛型參數(shù)設(shè)置為這個 Activity 的類型葡缰。
  2. 創(chuàng)建構(gòu)造函數(shù),接收 Activity 對象并調(diào)用 super(T) 方法(直接用編譯器的錯誤提醒創(chuàng)建就行)忱反。
  3. 實現(xiàn)抽象方法 onHandleMessage()泛释,在這里處理消息,這個函數(shù)保證傳遞來的 Activity 對象是非空的(也可以用錯誤提示直接創(chuàng)建)温算。

示例:

private static class CloseHandler extends WeakReferenceHandler<AdActivity> {
    CloseHandler(AdActivity activity) {
        super(activity);
    }

    @Override
    public void onHandleMessage(Message msg, @NonNull AdActivity a) {
        switch (msg.what) {
            case MESSAGE_CLOSE_MANUAL:
                a.closeManually();
                break;
            case MESSAGE_CLOSE_AUTO:
                a.closeAutomatically();
                break;
            case MESSAGE_COUNT_DOWN:
                a.countDown();
                break;
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怜校,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子米者,更是在濱河造成了極大的恐慌韭畸,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔓搞,死亡現(xiàn)場離奇詭異胰丁,居然都是意外死亡,警方通過查閱死者的電腦和手機喂分,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門锦庸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蒲祈,你說我怎么就攤上這事甘萧。” “怎么了梆掸?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵扬卷,是天一觀的道長。 經(jīng)常有香客問我酸钦,道長怪得,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮徒恋,結(jié)果婚禮上蚕断,老公的妹妹穿的比我還像新娘。我一直安慰自己入挣,他們只是感情好亿乳,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著径筏,像睡著了一般葛假。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上匠璧,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天桐款,我揣著相機與錄音,去河邊找鬼夷恍。 笑死魔眨,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的酿雪。 我是一名探鬼主播遏暴,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼指黎!你這毒婦竟也來了朋凉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤醋安,失蹤者是張志新(化名)和其女友劉穎杂彭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吓揪,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡亲怠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了柠辞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片团秽。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖叭首,靈堂內(nèi)的尸體忽然破棺而出习勤,到底是詐尸還是另有隱情,我是刑警寧澤焙格,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布图毕,位于F島的核電站,受9級特大地震影響眷唉,放射性物質(zhì)發(fā)生泄漏吴旋。R本人自食惡果不足惜损肛,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荣瑟。 院中可真熱鬧,春花似錦摩泪、人聲如沸笆焰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嚷掠。三九已至,卻和暖如春荞驴,著一層夾襖步出監(jiān)牢的瞬間不皆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工熊楼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留霹娄,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓鲫骗,卻偏偏與公主長得像犬耻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子执泰,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,185評論 25 707
  • 用兩張圖告訴你枕磁,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,732評論 2 59
  • 【Android Handler 消息機制】 前言 在Android開發(fā)中术吝,我們都知道不能在主線程中執(zhí)行耗時的任務(wù)...
    Rtia閱讀 4,844評論 1 28
  • 一 序言 在 傳統(tǒng)Ajax 時代计济,進行 API 等網(wǎng)絡(luò)請求都是通過 XMLHttpRequest或者封裝后的框架進...
    浪里行舟閱讀 9,430評論 1 5
  • ------時間管理課之三十七 學(xué)好一門課程需要主動學(xué)習(xí)、重復(fù)學(xué)習(xí)和刻意排苍、持續(xù)...
    劉曉雁閱讀 131評論 0 0