1. 程式人生 > >Android消息機制

Android消息機制

應該 dsm 版本 cor 方法 線程創建 lan 行數 white

Android消息機制

每個Android應用在啟動的時候都會創建一個線程。這個線程被稱為主線程或者UI線程。Android應用的全部操作默認都會執行在這個線程中。
可是當我們想要進行數據請求,圖片下載。或者其它耗時操作時,是不可能在這個UI線程做的。由於Android在3.0以後的版本號已經禁止了這件事情,直接拋出一個異常。所以我們須要一個子線程來處理那些除UI操作的事情。
可是這個又會有一個問題。我們僅僅能在UI線程進程UI操作,僅僅能在子線程進行耗時操作。假設我們須要在耗時操作結束後在Android界面上顯示一個View,我們應該怎麽做?我們是不可能在子線程直接刷新UI

的。這時我們須要用到Android的消息機制。來實現主線程和子線程的通信。簡單來說,就是子線程獲取到數據之後,不直接進行UI更新,而是把數據裝到消息中發送到主線程,主線程中有一個循環輪詢會馬上收到子線程發過來的信息,然後拿到消息數據後在主線程更新UI 。說起來比較簡單。我們來細致的看一下詳細是怎麽說的。

處理消息的手段——Handler, Looper, MessageQueue

Handler

我們先解說一下Handler,Handler顧名思義就是處理者,通常對他的使用方法是在UI線程中新建一個Handler,並覆寫他的handleMessage, 然後再耗時的線程中將消息post

UI線程。樣例例如以下:

class MyHandler extends Handler{
    @Override
    public void handleMessage(Message msg){
    //更新UI
    }
}

MyHandler mHandler = new MyHandler();
new Thread(){
    public void run(){
        mHandler.sendEmptyMessage(123);
    };
}.start();

這裏規定了Handler必須在主線程創建。由於僅僅有在UI線程創建才會讓Handler

關聯到已有的MessageQueue

MessageQueue被封裝到Looper中,而Looper又通過ThreadLocal封裝到一個線程中。最後相當於MessageQueue關聯了一個線程。所以簡單來說就是Handler將消息投遞到一個關聯了線程的MessageQueue中,然後Handler在從MessageQueue中取出消息,而且處理它。
我們看一下Handler的2個經常使用的方法

void handleMessage(Message msg) : 處理消息的方法
final boolean sendMessage(Message msg) : 馬上發送消息

第一個方法 我們通常在

相關推薦

Android機制1-Handler(Java層)(轉)

word get() als php lib light ora out getc 轉自:http://gityuan.com/2015/12/26/handler-message-framework/ 相關源碼 framework/base/core/java/an

Android機制——Handler

code port 過程 imp set mpat current ppc 銷毀 1 /**android的消息處理有三個核心類:Looper,Handler和Message。其實還有一個MessageQueue(消息隊列), 2 * 但是Messag

【原創】源碼角度分析Android機制系列(一)——Android機制概述

run 權限 開發 等待 通過 讀取 概述 走了 color ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 1.為什麽需要Android的消息機制 因為Android系統不允許在子線程中去訪問UI,即Android系統不允許在子線程中更新UI。 為什麽不允許

android 機制與仿新聞客戶端

android 消息機制 仿新聞客戶端 效果圖如下:具體步驟如下:1 布局文件中控件的設計2 訪問遠程服務器的資源xml文件,該文件包含新聞的內容等信息3 訪問到內容後把訪問內容顯示到頁面上具體代碼如下:1 MainActivitypackage com.yuanlp.newsclient; i

Android 機制

new 需要 一個 目標 width handle rri his 技術 一、 Handler 1、使用 <1>在主線程中定義一個 Handler, 重寫 handleMessage 方法 //在主線程中定義一個Handler private

Android機制

應該 dsm 版本 cor 方法 線程創建 lan 行數 white Android消息機制 每個Android應用在啟動的時候都會創建一個線程。這個線程被稱為主線程或者UI線程。Android應用的全部操作默認都會執行在這個線程中。 可是當

【原創】源碼角度分析Android機制系列(二)——ThreadLocal的工作過程

機制 simple hand 這就是 數據存儲 read etc lena 並且 ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 在上一篇文章中,我們已經提到了ThreadLocal,它並非線程,而是在線程中存儲數據用的。數據存儲以後,只能在指定的線程中獲取到數據

【原創】源碼角度分析Android機制系列(三)——ThreadLocal的工作原理

沒有 cit gen 管理 pre 靜態 bsp 允許 clas ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 先看Android源碼(API24)中對ThreadLocal的定義: public class ThreadLocal<T>

【原創】源碼角度分析Android機制系列(四)——MessageQueue的工作原理

enc 容易 工作 trie oss 當前 within which ptime ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 MessageQueue,主要包含2個操作:插入和讀取。讀取操作會伴隨著刪除操作,插入和讀取對應的方法分別為enqueueMes

【原創】源碼角度分析Android機制系列(六)——Handler的工作原理

urn long empty isa pat stat 開啟 it is performed ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 先看Handler的定義: /** * A Handler allows you to send and proc

Android Framework 分析---2機制Native層

jnienv car 下一個 sas tracking zed 高效 方法 java 在Android的消息機制中。不僅提供了供Application 開發使用的java的消息循環。事實上java的機制終於還是靠native來實現的。在native不僅提供一套消息傳

Android機制

系統 接口 以及 end 了解 nbsp log roo sage 1、背景 Handler是Android消息機制的上層

android中的Handler機制

img 導致 也不能 步驟 4.0 new 無響應 強制 主線程 為什麽要引用消息機制?     1:ANR(application not response)應用無響應 主線程(UI線程)     2:如果在主線程中進行了耗時操作,就會導致ANR(比如鏈接網絡,拷

Android Handler 機制原理解析

當前 its leak 示例 異步消息 了解 modifier supported 異步 前言 做過 Android 開發的同學都知道,不能在非主線程修改 UI 控件,因為 Android 規定只能在主線程中訪問 UI ,如果在子線程中訪問 UI ,那麽程序就會拋出異常 a

Handler機制的一些原理(直接用code講解)——Android開發

over blog 線程 控件 android 開發 處理 發送消息 關聯 package com.example.handlertest; import android.os.Bundle; import android.os.Handler; import a

Android 面試收集錄5 機制

分支 tin 子類 業務 順序 發送消息 ui線程 eight arr 1.消息機制概述 1.1.消息機制的簡介   在Android中使用消息機制,我們首先想到的就是Handler。   沒錯,Handler是Android消息機制的上層接口。   

Android SurfaceFlinger服務(四) ----- 機制MessageQueue

events on() inpu str lB 取消 onf CA andro SurfaceFlinger有著自己的消息隊列MessageQueue,用來處理顯示相關的消息,比如Vsync消息。 相關文件: frameworks/native/services/surf

Android Handler機制源碼解析

靜態變量 loop final leg indicate called 好記性不如爛筆頭 nal efault 好記性不如爛筆頭,今天來分析一下Handler的源碼實現 Handler機制是Android系統的基礎,是多線程之間切換的基礎。下面我們分析一下Handler的源

Android異步機制

onclick rst tee bar 簡書 rac java基礎 異常 middle 目錄介紹 1.Handler的常見的使用方式 2.如何在子線程中定義Handler 3.主線程如何自動調用Looper.prepare() 4.Looper.prepare(

Win32API 機制

long 鼠標位置 int pos 參數 機會 翻譯 term wpa Win32API 消息機制 windows平臺下,什麽是消息? 當系統通知窗口工作時,就采用消息的方式派發給窗口的窗口處理函數 消息組成的6大部件組合,缺一不可: 1 窗口句柄 每個win32