Android訊息機制-Handler(一)
Android為了執行緒安全,不允許我們在UI執行緒外(即主執行緒外的子執行緒)操作UI。
1. 子執行緒為啥不能操作UI呢?
試想一下,如果多個執行緒都可以操作UI,不同執行緒都可以控制同一個UI,那麼勢必會出現執行緒安全問題。執行緒A在修改UI的同事,執行緒B也在改同一個UI,搶奪資源,且不同步。所以子執行緒操作UI都交給UI主執行緒去處理2. 子執行緒中更新UI的4種方法
方法一:子執行緒呼叫Handler的sendMessage(message)傳送事件。 方法二:Activity.runOnUiThread(Runnable )方法三:View.post(Runnable )Activity.runOnUiThread( new Runnable() { public void run(){更新UI}} );
方法四:AsyncTask
先從Handler講起
3. Handler的用法
Handler的使用也有兩種方式,一個是在主執行緒 Activity 中定義 Handler,另一個是在子執行緒類中定義Handler
此次直說最簡單的Activity 中定義 Handler,執行緒類中定義Handler的使用方法和原理以後再說。
A.主執行緒中定義Handler
Handler handler= new Handler()//在主執行緒中建立,所以自動繫結主執行緒 { @Override public void handleMessage(Message msg) { String x=(String )msg.obj;//msg.obj可以對message攜帶的資料進行還原,須強制型別轉換 switch (msg.what)//根據what處理不同操作 { case 1: initData(true);//我自己的更新UI的方法 break; case 2: loadMoreData(page);//我自己的更新UI的方法 break; } }
B. 子執行緒中傳送訊息,完成UI操作
private void updateWeather() { new Thread(new Runnable(){ @Override public void run() { //以下可以二選一 //1.耗時操作,完成之後傳送訊息給Handler,完成UI更新; mHandler.sendEmptyMessage(0); //2.需要資料傳遞,用下面方法; Message msg =new Message(); msg.what = 1;//what可以區分message,用於在handleMessage中識別message; msg.obj = "資料";//可以是基本型別,可以是物件,可以是List、map等; mHandler.sendMessage(msg); } }).start(); }
原理下篇再講
相關推薦
Android訊息機制-Handler(一)
Android為了執行緒安全,不允許我們在UI執行緒外(即主執行緒外的子執行緒)操作UI。 1. 子執行緒為啥不能操作UI呢? 試想一下,如果多個執行緒都可以操作UI,不同執行緒都可以控制同一個UI,那麼勢必會出現執行緒安全問題。執行緒A在修改UI的同事,執行緒B也在改同一
Android Handler 訊息機制分析(一)
Handler,Message,MessageQueue,Looper,是android一種訊息處理機制,在android開發中經常會用到,當Handler建立後,會被繫結到它所在的執行緒上,處理訊息的成員及其功能如下: Handler:傳送一個
Android Hanlder機制分析(一) Hanlder常見用方法及原理
一、Handler介紹 在android開發的過程中,經常需要對UI進行更新操作。但是在子執行緒中對UI進行更新在android中是不允許的,這涉及到了執行緒安全問題,因此更新UI只能在主執行緒(UI執行緒)中進行。但是如果將耗時操作放在了UI執行緒中會帶
Android訊息機制Handler解析(原始碼+Demo)
新建了一個qq群 482543750,歡迎一起學習Android的小夥伴加入。 提供各種Android學習資料,面試資料,Android簡歷模板。 Handler是開發人員在面試過程中最常見的問題之一了,這篇文章將較為全面地對Handler進行解讀,包括原始碼層,
【原創】源碼角度分析Android的消息機制系列(一)——Android消息機制概述
run 權限 開發 等待 通過 讀取 概述 走了 color ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 1.為什麽需要Android的消息機制 因為Android系統不允許在子線程中去訪問UI,即Android系統不允許在子線程中更新UI。 為什麽不允許
Android 踩坑記錄(一)- Recyclerview的快取機制
起因上週因為業務需要,要完成一個展示優惠券資訊的列表,列表內每張券都有詳細資訊,點選詳細資訊或者右面向下的箭頭,可以展開相應優惠券的詳細資訊。展開的同時新增兩個動畫,展開的佈局需要做緩慢展開的動畫,向下展開的箭頭需要做順時針180度旋轉變成向上收縮的狀態。當時看到這覺得沒問題,一個RecyclerView就搞
Android Hanlder機制分析(二) HandThread Handler.Obtain()
(一)建立looper執行緒的方法比較 在上一篇中,講到了在UI執行緒中Handler的原理及使用。如果我們需要在自己的子執行緒中建立Handler就需要自己為子執行緒繫結looper了。如下: private MyHandlerTread mHand
關於UI執行緒與非UI執行緒互動,有關Handler機制等(一)
在Android中,一個activity有一個主執行緒也叫UI執行緒,作用就是用來繪製UI介面,在這個執行緒裡面,你的應用和android的UI元件發生互動。所以當你需要進行某些費時操作的時候,比如訪問網路等,如果放入UI執行緒,就會阻塞介面的繪製,當介面不能繪製的時候,整
Android source code(7.1) 廣播機制解析(一)
廣播註冊的全部大致過程 無序廣播發送的全部大致過程 一、廣播註冊 關於廣播的註冊,從程式碼的角度進行跟蹤註冊的流程,主要用到ContextImp.java、ActivityManagerNative.java、ActivityManagerService
[日更-2019.5.24、25、26] Android系統中的Binder通訊機制分析(一)--servicemanager
宣告 其實對於Android系統Binder通訊的機制早就有分析的想法,記得去年6、7月份Mr.Deng離職期間約定一起對其進行
Android內存優化(一)DVM和ART原理初探
java虛擬機 劃分 cimage beef 靜態 由於 jar blank 查找 要學習Android的內存優化,首先要了解Java虛擬機,此前我用了多篇文章來介紹Java虛擬機的知識,就是為了這個系列做鋪墊。在Android開發中我們接觸的是與Java虛擬機類似的Dal
android的入門記錄(一)
下載到本地 可能 安裝 subst 數據 工具包 一次 以及 由於 ---恢復內容開始--- 首先,這是我人生中的第一篇博客,也許嚴格意義上它並不算是一篇博客,但也代表著一些東西。 前言 我們往往在開始學習一門新的語言或者課程時會遇見各式各樣的問題,比
Android系統啟動流程(一)解析init進程啟動過程
option 寫入 android change failed miss 通知 target sna 前言 作為“Android框架層”這個大系列中的第一個系列,我們首先要了解的是Android系統啟動流程,在這個流程中會涉及到很多重要的知識點,這個系列我們就來一一講解它們
Android項目實戰(一): SpannableString與SpannableStringBuilder
append() 同時 uil 註意 1.5 查看 strong 尊重 bject 原文:Android項目實戰(一): SpannableString與SpannableStringBuilder前言: 曾經在一些APP中的一些類似“幫助”&ld
Android繪制優化(一)繪制性能分析
pro -i tco public 繼續 但是 們的 sched mda 前言 一個優秀的應用不僅僅是要有吸引人的功能和交互,同時在性能上也有很高的要求。運行Android系統的手機,雖然配置在不斷的提升,但仍舊無法和PC相比,無法做到PC那樣擁有超大的內存以及高性能的CP
Android內存優化(一)Dalvik虛擬機和ART虛擬機對比
參考 -a 會有 font google 都是 http -s 轉換成 1.概述 Android4.4以上開始使用ART虛擬機,在此之前我們一直使用的Dalvik虛擬機,那麽為什麽Google突然換了Android運行的虛擬機呢?答案只有一個:ART虛擬機更優秀。 2.D
Android ANR分析實踐(一):北京×××搭建ANR是什麽、產生的原因及如何避免ANR
例如 三種 handler 線程處理 不足 線程阻塞 種類 工具 input 一、 什麽是北京×××搭建 dsluntan.com VX:17061863513ANR ANR,(Application Not Responding) 即應用程序無響應,在android應
Android TV開發總結(一)構建一個TV app前要知道的事兒
進入 line 指南 col 遠程 引導 允許 方法 imp 原文:Android TV開發總結(一)構建一個TV app前要知道的事兒 版權聲明:我已委托“維權騎士”(rightknights.com)為我的文章進行維權行動.轉載務必轉載所
Android Native Hook技術(一)
數組 chef protect 獲取 通過 防止 example tile ofo 原理分析 ADBI是一個著名的安卓平臺hook框架,基於 動態庫註入 與 inline hook 技術實現。該框架主要由2個模塊構成:1)hijack負責將so註入到目標進程空間,2)lib
Android開發 - 掌握ConstraintLayout(一)傳統布局的問題
ttext 指定 面對復雜 簡單的 技術分享 改變 out jpg 並且 在傳統的Android開發中,頁面布局占用了我們很多的開發時間,而且面對復雜頁面的時候,傳統的一些布局會顯得非常復雜,每種布局都有特定的應用場景,我們通常需要各種布局結合起來使用來實現復雜的頁面。隨著