1. 程式人生 > >Android Handler機制圖解以及在實際中的運用

Android Handler機制圖解以及在實際中的運用

大家在Android開發中不免會遇到主執行緒跟新UI,執行緒切換的場景,其中Handler就是一名大將了有必要對他進行了解。

一、圖解Handler的基本概念

什麼是Handler呢,Handler是Android給我們提供來跟新UI的一套機制,也是一套訊息處理的機制,可傳送也可通過他來處理訊息,我們看下圖。

這裡寫圖片描述

二、為什麼用Handler

Android為什麼要設計只能通過Handler機制跟新UI呢,最根本目的就是解決多執行緒併發問題,只有主執行緒能更新UI,
試想多執行緒進行更新UI,又沒有枷鎖機制,會跟新介面混亂,如果對跟新ui 操作進行枷鎖處理又會導致效能下降,Handler就出現了

三、Handler的使用步驟

  • 主執行緒宣告Handler例項
private Handler mHandler = new Handler(new Handler.Callback() {
        /**
         * @param message callback用於獲取handler傳送的訊息,
         * @return  如果返回true就回去成功不會向下傳遞老,即不執行下面的handleMessage方法達到攔截目的
         */
        @Override
        public boolean handleMessage
(Message message) { return false; } }){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 0: //在這裡可以進行UI操作 //對msg.obj進行String強制轉換 String str = (String) msg.obj; mTvShow.setText(str); break
; default: break; } } };
  • 子執行緒傳送訊息
mTvShow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(2000);//模擬網路操作
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        //建立一個message設定what欄位的值為1,主要是區分不同的message
                        //設定message.obj的內容,呼叫Handler的message物件
                        String str = "Nice to Meet You";
                        Message msg = new Message();//建立也可用複用系統的message物件Message msg = mHandler.obtainMessage();
                        msg.what = 0;//訊息標示
                        msg.arg1=2;//存放整形資料,如果攜帶資料簡單,優先使用arg1和arg2,比Bundle更節省記憶體。
                        msg.arg2=3;   //存放整形資料
                        //msg.obj = str;//msg.obj = xxx可傳遞一個物件
                        Bundle bundle=new Bundle();
                        bundle.putString("dd","adfasd");
                        bundle.putInt("love",5);
                        msg.setData(bundle);
                        msg.obj=bundle;   //用來存放Object型別的任意物件
                        mHandler.sendMessage(msg);//子執行緒中向UI執行緒傳送msg進跟新UI

                        /**
                         * mHandler.sendEmptyMessage(int);釋出一個空訊息
                         * mHandler.sendMessage(msg);允許你安排一帶資料的Message物件到佇列中等待跟新。
                         * mHandler.sendMessageAtTime(Message,long);
                         * mHandler.sendMessageDelayed(Message,long);
                         * sendEmptyMessageAtTime(int what, long uptimeMillis); //定時傳送空訊息
                         * sendEmptyMessageDelayed(int what, long delayMillis); //延時傳送空訊息
                         * sendMessageAtFrontOfQueue(Message msg); //最先處理訊息(慎用)
                         */
                    }
                }).start();
            }
        });

待續…

相關推薦

Android Handler機制圖解以及實際運用

大家在Android開發中不免會遇到主執行緒跟新UI,執行緒切換的場景,其中Handler就是一名大將了有必要對他進行了解。 一、圖解Handler的基本概念 什麼是Handler呢,Handler是Android給我們提供來跟新UI的一套機制,也是

Android Handler 機制以及各方法所線上程原理分析

Handler 的定義及作用: 因為有的文章已經說得比較清楚了,就直接引用下。這裡借鑑http://mobile.51cto.com/aprogram-442833.htm 一、Handler的定義: 主要接受子執行緒傳送的資料, 並用此資料配合主執行緒更新UI。

Android Handler 機制原理(轉)

oop 滿足 src ssa .net adl 主線程 實例 分享圖片 andriod提供了Handler 和 Looper 來滿足線程間的通信。Handler先進先出原則。Looper類用來管理特定線程內對象之間的消息交換(MessageExchange)。1)Loope

Android-Handler機制詳解

Handler 1、handler是什麼? 答:handler 是更新UI介面的機制,也是訊息處理的機制,我們可以傳送訊息,也可以處理訊息 2、為什麼要有Handler? 答:Android在設計的時候,封裝了一套訊息建立,傳遞,處理機制,如果不遵循這樣的機制就沒法更新UI資訊,就會丟擲

Android Handler機制理解和AsyncTask使用小記

Android Handler機制理解和AsyncTask使用小記 這是一篇淺入淺出的文章,對handler的使用和問題進行了一個總結,推薦看文章的你自己動手去練習,記憶和理解會更深刻一點。 Handler的概念 我們先看一下Handler的百科介紹: Handler主要用於非同步

Android Handler機制理解

什麼是Handler? Handler是Android系統給我們提供的一套用來更新UI的機制,也是一套訊息處理機制,我們可以使用Handler來發送訊息,也可以通過它來處理訊息 Android中為什麼要提供訊息機制 我們都知道在android中有兩個規定: 1. 網路請求操作要放到子

unity 利用Android Studio 下載AndriodSDK以及Unity的配置

1:嗯我這篇文章主要是介紹下載安卓sdk的方法,以及遇到的問題。 2:首先你需要下載andriod studio IDE ,然後找到SdkMannger   下載你需要的sdk.上面有選擇的路徑,注意一下,這個路徑下產生的sdk,就是需要放在unity裡面的去配置andr

Android快取機制——DiskLruCache在硬碟快取

一、Android中的快取策略 一般來說,快取策略主要包含快取的新增、獲取和刪除這三類操作。如何新增和獲取快取這個比較好理解,那麼為什麼還要刪除快取呢?這是因為不管是記憶體快取還是硬碟快取,它們的快取大小都是有限的。當快取滿了之後,再想其新增快取,這個時候就需要

Android Handler機制

1.Handler機制 為了避免ANR,我們會通常把耗時操作放在子執行緒裡面進行,因為子執行緒不能更新UI,所以當子執行緒需要更新UI的時候就需要藉助到安卓的訊息機制,也就是Handler機制。 2.作用 避免ANR,程式掛了,崩潰了。 造成ANR原因:1.在Activit

Android-Handler機制,面試解答

本文轉載自: Handler 1、handler是什麼? 答:handler是更新UI介面的機制,也是訊息處理的機制,我們可以傳送訊息,也可以處理訊息 2、為什麼要有Handler? 答:Android在設計的時候,封裝了一套訊息建立、傳遞、處理機制,如果不

簡潔移動的Java程式碼模擬Android Handler機制,值得一看!!

Handler機制簡介 Handler是android中最重要組成部分之一,Handler機制可以看做是一個訊息阻塞佇列,APP啟動後很快就進入死迴圈(while迴圈),不斷的讀取訊息佇列中的訊息,每個執行緒最多隻有一個訊息佇列,沒有訊息時就阻塞,有就立馬執行。所有訊息

深入理解android Handler機制

通過原始碼理解android 中Handler,Message,Looper,MessageQueue之間的關係,之前說到handler機制,都是在網上看到得別人是怎麼講解的,自己就機械的記下來,回來忘了再到網上搜一堆資料看看,對自己本身能力沒有太大的提升。紙上

Android Handler 機制

Handler 簡介 一個Handler允許傳送和處理Message,通過關聯執行緒的 MessageQueue 執行 Runnable 物件。 每個Handler例項都和一個單獨的執行緒及其訊息佇列繫結。 可以將一個任務切換到Handler所在的執行緒中去執行。一個用

Android Handler機制原始碼分析

1)Looper: 一個執行緒可以產生一個Looper物件,由它來管理此執行緒裡的MessageQueue(訊息佇列)。 2)Handler: 你可以構造Handler物件來與Looper溝通,以便push新訊息到MessageQueue裡;或者接收Looper從Messa

Android快取機制——LruCache在記憶體快取

一、Android中的快取策略 一般來說,快取策略主要包含快取的新增、獲取和刪除這三類操作。如何新增和獲取快取這個比較好理解,那麼為什麼還要刪除快取呢?這是因為不管是記憶體快取還是硬碟快取,它們的快取大小都是有限的。當快取滿了之後,再想其新增快取,這個時候就需要

Android-Handler機制詳解並自定義Handler

之前研究過Android的Handler機制,但是一直沒有機會自己實現一次。最近又看到這個Handler機制,於是決定自己實現以下這個Handler機制。 首先,簡單介紹以下Handler機制。 Handler機制在Android中通常用來更新UI:子執行緒

android Handler機制原理 4個組成部分原始碼解析

在android開發中,經常會在子執行緒中進行一些操作,當操作完畢後會通過handler傳送一些資料給主執行緒,通知主執行緒做相應的操作。 探索其背後的原理:子執行緒 handler 主執行緒 其實構成了執行緒模型中的經典問題 生產者消費者模型。 生

模擬Android Handler機制——單執行緒處理多工

訊息類(Message):package p; public class Message { private Runnable runnable; private long start; pr

Soul Android app 懸浮view以及帖子view的聯動重新整理逆向分析

Soul app是我司的競品,對它的語音音樂播放同步聯動的邏輯很感興趣,於是就開啟了一波逆向分析。 下面看程式碼,以及技術分析,直接步入正軌,哈哈。 我們根據https://github.com/xingstarx/ActivityTracker 這個工具,找到某一個頁面,比如cn.soulapp.

圖解 Android 事件分發機制handler 機制

在Android開發中,事件分發機制是一塊Android比較重要的知識體系,瞭解並熟悉整套的分發機制有助於更好的分析各種點選滑動失效問題,更好去擴充套件控制元件的事件功能和開發自定義控制元件,同時事件分發機制也是Android面試必問考點之一,如果你能把下面的一些事件分發圖當場畫出來肯定加分不少。廢