android 壁纸服务,8.1 初识Android壁纸
本章將對(duì)壁紙的實(shí)現(xiàn)原理進(jìn)行討論。在Android中,壁紙分為靜態(tài)與動(dòng)態(tài)兩種。靜態(tài)壁紙是一張圖片,而動(dòng)態(tài)壁紙則以動(dòng)畫為表現(xiàn)形式,或者可以對(duì)用戶的操作作出反應(yīng)。這兩種形式看似差異很大,其實(shí)二者的本質(zhì)是統(tǒng)一的。它們都以一個(gè)Service的形式運(yùn)行在系統(tǒng)后臺(tái),并在一個(gè)類型為TYPE\_WALLPAPER的窗口上繪制內(nèi)容。進(jìn)一步講,靜態(tài)壁紙是一種特殊的動(dòng)態(tài)壁紙,它僅在窗口上渲染一張圖片,并且不會(huì)對(duì)用戶的操作作出反應(yīng)。因此本章將首先通過動(dòng)態(tài)壁紙的實(shí)現(xiàn)討論Android壁紙的實(shí)現(xiàn)與管理原理,然后在對(duì)靜態(tài)壁紙的實(shí)現(xiàn)做介紹。
Android壁紙的實(shí)現(xiàn)與管理分為三個(gè)層次:
- WallpaperService與Engine。同SystemUI一樣,壁紙運(yùn)行在一個(gè)Android服務(wù)之中,這個(gè)服務(wù)的名字叫做WallpaperService。當(dāng)用戶選擇了一個(gè)壁紙之后,此壁紙所對(duì)應(yīng)的WallpaperService便會(huì)啟動(dòng)并開始進(jìn)行壁紙的繪制工作,因此繼承并定制WallpaperService是開發(fā)者進(jìn)行壁紙開發(fā)的第一步。Engine是WallpaperService中的一個(gè)內(nèi)部類,實(shí)現(xiàn)了壁紙窗口的創(chuàng)建以及Surface的維護(hù)工作。另外,Engine提供了可供子類重寫的一系列回調(diào),用于通知壁紙開發(fā)者關(guān)于壁紙的生命周期、Surface狀態(tài)的變化以及對(duì)用戶的輸入事件進(jìn)行響應(yīng)。可以說,Engine類是壁紙實(shí)現(xiàn)的核心所在。壁紙開發(fā)者需要繼承Engine類,并重寫其提供的回調(diào)以完成壁紙的開發(fā)。這一層次的內(nèi)容主要體現(xiàn)了壁紙的實(shí)現(xiàn)原理。
- WallpaperManagerService,這個(gè)系統(tǒng)服務(wù)用于管理壁紙的運(yùn)行與切換,并通過WallpaperManager類向外界提供操作壁紙的接口。當(dāng)通過WallpaperManagaer的接口進(jìn)行壁紙的切換時(shí),WallpaperManagerService會(huì)取消當(dāng)前壁紙的WallpaperService的綁定,并啟動(dòng)新壁紙的WallpaperService。另外,Engine類進(jìn)行窗口創(chuàng)建時(shí)所使用的窗口令牌也是由WallpaperManagerService提供的。這一層次主要體現(xiàn)了Android對(duì)壁紙的管理方式。
- WindowManagerService,用于計(jì)算壁紙窗口的Z序、可見性以及為壁紙應(yīng)用窗口動(dòng)畫。壁紙窗口(TYPE\_WALLPAPER)的Z序計(jì)算不同于其他類型的窗口。其他窗口依照其類型會(huì)有固定的mBaseLayer以及mSubLayer,并結(jié)合它們所屬的Activity的順序或創(chuàng)建順序進(jìn)行Z序的計(jì)算,因此這些窗口的Z序相對(duì)固定。而壁紙窗口則不然,它的Z序會(huì)根據(jù)FLAG\_SHOW\_WALLPAPER標(biāo)記在其它窗口的LayoutParams.flags中的存在情況而不斷地被調(diào)整。這一層次主要體現(xiàn)了Android對(duì)壁紙窗口的管理方式。
本章將通過對(duì)動(dòng)態(tài)壁紙切換的過程進(jìn)行分析揭示W(wǎng)allpaperService、Engine以及WallpaperManagerService三者的實(shí)現(xiàn)原理以及協(xié)作情況。靜態(tài)壁紙作為動(dòng)態(tài)壁紙的一種特殊情況,將會(huì)在完成動(dòng)態(tài)壁紙的學(xué)習(xí)之后于8.3節(jié)進(jìn)行討論。而WindowManagerService對(duì)壁紙窗口的處理將在8.4節(jié)進(jìn)行介紹。
總結(jié)
以上是生活随笔為你收集整理的android 壁纸服务,8.1 初识Android壁纸的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue里实现同步执行方法_vue中的wa
- 下一篇: 头文件介绍