原创 AndroidQ 圖形系統(10)SurfaceView實現原理之surface創建和繪製原理

上一篇文章說了SurfaceView默認Z-order是小於主窗口的,爲了能夠顯示出來,需要以自身所佔矩形區域在主窗口設置透明區域,這是在SurfaceView的回調onAttachedToWindow中實現的,本篇接着看Surf

原创 AndroidQ 圖形系統(9)SurfaceView實現原理之設置透明區域

SurfaceView概述 SurfaceView是一種特殊的View,它可以並且應該在子線程進行UI繪製,它具有獨立於應用程序之外的surface,主要用來處理複雜,耗時的UI繪製,如視頻播放,camera預覽,遊戲等,Surf

原创 AndroidQ FrameLayout的測量流程

上一篇文章總體分析了View的測量流程,從ViewRootImpl的performMeasure方法爲入口,以遞歸的方式從DecoreView開始測量,這篇文章來詳細分析一下FrameLayout遞歸測量完子View之後如何得到自

原创 AndroidQ 應用層Vsync信號的註冊與接收(上)

上一篇文章我們分析了UI刷新機制,知道了Android UI刷新是在接收到Vsync信號之後才進行的,接着我準備繼續分析Vsync如何向native層註冊以及native層如何將Vsync發到上層,這部分比較複雜,我準備分兩篇文章

原创 AppWindowToken和WindowToken的添加流程和排序規則

本篇基於AndroidQ代碼分析 我們知道Android系統有三種類型窗口,應用窗口,系統窗口,子窗口,無論哪種窗口在WMS都會用一個WindowState來描述,Android窗口Z軸計算以及WindowState排列規則詳細介

原创 從一個截屏窗口的創建看Android的窗口機制

從一個Dialog的創建看Android的窗口機制(上篇)和從一個Dialog的創建看Android的窗口機制(下篇) 從應用類型窗口的創建分析了Android的窗口機制,這篇打算從系統窗口再來分析下,看看不同類型窗口的添加有何異

原创 Android系統時間同步NetworkTimeUpdateService

Android系統時間更新有兩種方式:NITZ時間和NTP時間,NITZ由運營商提供,通過sim卡更新時間,NTP爲通過網絡,訪問服務器獲取時間,這裏主要介紹NTP的方式。 NetworkTimeUpdateService啓動 N

原创 AndroidQ 應用層Vsync信號的註冊與接收(下)

上一篇文章主要分析了java層DisplayEventReceiver中的nativeInit函數,這個函數主要作用就是創建了應用層和surfaceFlinger的連接,通過一對socket,對應mReceiveFd和mSendF

原创 增加一個物理按鍵導致外接耳機音量鍵和暫停鍵無法響應

前段時間開發了一個功能,kaios設備上新增了一個物理按鍵,此按鍵用來進行快捷撥號,可以添加一個號碼,通過點擊三次實現撥號,我實現此功能的策略是選擇了一個系統不用的按鍵F12,通過替換的方式,將F12替換爲新增按鍵Qd,具體實現可

原创 Android窗口Z軸計算以及WindowState排列規則

本篇基於Android Q代碼,建議先看從一個Dialog的創建看Android的窗口機制(上篇)和從一個Dialog的創建看Android的窗口機制(下篇)大致瞭解窗口的添加機制再看本篇 本篇主要分析Android窗口的Z軸計算

原创 AndroidQ SurfaceFlinger進程對Vsync的接收與分發(下)

上一篇文章分析到了SurfaceFlinger進程接收到來自硬件的Vsync的處理流程,主要是在EventThread內部線程的threadMain函數中,這個函數中主要分析了對接收到的事件的處理,並沒有分析它的來源,導致遺留了兩

原创 AndroidQ UI刷新機制詳解

本篇文章分析Android UI刷新機制,就是更新UI,做Android開發初期我們經常會聽說不能在子線程更新UI,以及Activity的onCreate方法中獲取不到View寬高的問題 我們先來說一下子線程不能更新UI的問題:

原创 AndroidQ View的測量流程onMeasure

本篇文章來分析一下View的測量流程,在寫自定義控件時往往需要重寫View的onMeasure來定義自己的測量規矩,如果我們不熟悉測量流程,就算根據別人的自定義控件學習,最後寫出來了,但是再遇到新的自定義控件可能還是無從下手 我們

原创 AndroidQ SurfaceFlinger進程對Vsync的接收與分發(上)

前面兩篇文章分析了應用層對Vsync的註冊與接收,收到Vsync之後應用層便開始View的繪製 我們先來回顧一下大致的流程: 首先應用層想要繪製UI,則需要向native層註冊接收下一個到來的Vsync,註冊的過程是通過Even

原创 AndroidQ 圖形系統(1)Surface與SurfaceControl創建分析

本篇文章分析Surface和SurfaceControl的創建流程,在window通過addView添加到WMS時會創建ViewRootImpl,ViewRootImpl創建好之後Surface,SurfaceControl都作爲