Android消息機制
Android消息機制
每個Android應用在啟動的時候都會創建一個線程。這個線程被稱為主線程或者U
I線程。Android應用的全部操作默認都會執行在這個線程中。
可是當我們想要進行數據請求,圖片下載。或者其它耗時操作時,是不可能在這個UI
線程做的。由於Android在3.0以後的版本號已經禁止了這件事情,直接拋出一個異常。所以我們須要一個子線程來處理那些除UI
操作的事情。
可是這個又會有一個問題。我們僅僅能在UI
線程進程UI
操作,僅僅能在子線程進行耗時操作。假設我們須要在耗時操作結束後在Android界面上顯示一個View,我們應該怎麽做?我們是不可能在子線程直接刷新UI
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) :
馬上發送消息
第一個方法 我們通常在 word get() als php lib light ora out getc 轉自:http://gityuan.com/2015/12/26/handler-message-framework/
相關源碼
framework/base/core/java/an code port 過程 imp set mpat current ppc 銷毀
1 /**android的消息處理有三個核心類:Looper,Handler和Message。其實還有一個MessageQueue(消息隊列),
2 * 但是Messag run 權限 開發 等待 通過 讀取 概述 走了 color ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。
1.為什麽需要Android的消息機制
因為Android系統不允許在子線程中去訪問UI,即Android系統不允許在子線程中更新UI。
為什麽不允許 android 消息機制 仿新聞客戶端 效果圖如下:具體步驟如下:1 布局文件中控件的設計2 訪問遠程服務器的資源xml文件,該文件包含新聞的內容等信息3 訪問到內容後把訪問內容顯示到頁面上具體代碼如下:1 MainActivitypackage com.yuanlp.newsclient;
i new 需要 一個 目標 width handle rri his 技術 一、 Handler 1、使用 <1>在主線程中定義一個 Handler, 重寫 handleMessage 方法 //在主線程中定義一個Handler private 應該 dsm 版本 cor 方法 線程創建 lan 行數 white
Android消息機制
每個Android應用在啟動的時候都會創建一個線程。這個線程被稱為主線程或者UI線程。Android應用的全部操作默認都會執行在這個線程中。
可是當 機制 simple hand 這就是 數據存儲 read etc lena 並且 ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。
在上一篇文章中,我們已經提到了ThreadLocal,它並非線程,而是在線程中存儲數據用的。數據存儲以後,只能在指定的線程中獲取到數據 沒有 cit gen 管理 pre 靜態 bsp 允許 clas ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。
先看Android源碼(API24)中對ThreadLocal的定義:
public class ThreadLocal<T>
enc 容易 工作 trie oss 當前 within which ptime ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。
MessageQueue,主要包含2個操作:插入和讀取。讀取操作會伴隨著刪除操作,插入和讀取對應的方法分別為enqueueMes urn long empty isa pat stat 開啟 it is performed ι 版權聲明:本文為博主原創文章,未經博主允許不得轉載。
先看Handler的定義:
/**
* A Handler allows you to send and proc jnienv car 下一個 sas tracking zed 高效 方法 java
在Android的消息機制中。不僅提供了供Application 開發使用的java的消息循環。事實上java的機制終於還是靠native來實現的。在native不僅提供一套消息傳 系統 接口 以及 end 了解 nbsp log roo sage 1、背景
Handler是Android消息機制的上層 img 導致 也不能 步驟 4.0 new 無響應 強制 主線程 為什麽要引用消息機制?
1:ANR(application not response)應用無響應 主線程(UI線程)
2:如果在主線程中進行了耗時操作,就會導致ANR(比如鏈接網絡,拷 當前 its leak 示例 異步消息 了解 modifier supported 異步 前言
做過 Android 開發的同學都知道,不能在非主線程修改 UI 控件,因為 Android 規定只能在主線程中訪問 UI ,如果在子線程中訪問 UI ,那麽程序就會拋出異常
a over blog 線程 控件 android 開發 處理 發送消息 關聯 package com.example.handlertest; import android.os.Bundle; import android.os.Handler; import a 分支 tin 子類 業務 順序 發送消息 ui線程 eight arr
1.消息機制概述
1.1.消息機制的簡介
在Android中使用消息機制,我們首先想到的就是Handler。
沒錯,Handler是Android消息機制的上層接口。
events on() inpu str lB 取消 onf CA andro SurfaceFlinger有著自己的消息隊列MessageQueue,用來處理顯示相關的消息,比如Vsync消息。
相關文件:
frameworks/native/services/surf 靜態變量 loop final leg indicate called 好記性不如爛筆頭 nal efault 好記性不如爛筆頭,今天來分析一下Handler的源碼實現
Handler機制是Android系統的基礎,是多線程之間切換的基礎。下面我們分析一下Handler的源 onclick rst tee bar 簡書 rac java基礎 異常 middle 目錄介紹
1.Handler的常見的使用方式
2.如何在子線程中定義Handler
3.主線程如何自動調用Looper.prepare()
4.Looper.prepare( long 鼠標位置 int pos 參數 機會 翻譯 term wpa Win32API 消息機制
windows平臺下,什麽是消息?
當系統通知窗口工作時,就采用消息的方式派發給窗口的窗口處理函數
消息組成的6大部件組合,缺一不可:
1 窗口句柄
每個win32
相關推薦
Android消息機制1-Handler(Java層)(轉)
Android消息機制——Handler
【原創】源碼角度分析Android的消息機制系列(一)——Android消息機制概述
android 消息機制與仿新聞客戶端
Android 消息機制
Android消息機制
【原創】源碼角度分析Android的消息機制系列(二)——ThreadLocal的工作過程
【原創】源碼角度分析Android的消息機制系列(三)——ThreadLocal的工作原理
【原創】源碼角度分析Android的消息機制系列(四)——MessageQueue的工作原理
【原創】源碼角度分析Android的消息機制系列(六)——Handler的工作原理
Android Framework 分析---2消息機制Native層
Android的消息機制
android中的Handler消息機制
Android Handler 消息機制原理解析
Handler消息機制的一些原理(直接用code講解)——Android開發
Android 面試收集錄5 消息機制
Android SurfaceFlinger服務(四) ----- 消息機制MessageQueue
Android Handler消息機制源碼解析
Android異步消息機制
Win32API 消息機制