本文在 https://wkmcyz.notion.site/Android-e203f65b6c1c4022b053db6ce24570bd 阅读体验更好。
说说 Android 的壁纸管理
Android 的壁纸是由 WallpaperManagerService 进行管理的。下文中的 “管理服务” 指的即是 WallpaperManagerService 。
Android 上的壁纸有静态壁纸和动态壁纸之分,不过其启动以及进程间的通信的原理和模式是一样的,只是实际的绘制不同而已,一个只绘制一张图,而另一个会根据时间绘制相同的内容。
WallpaperManagerService 对壁纸的管理
管理服务在切换壁纸的时候,每次切换的时候,并不是指定一个图片文件就可以进行切换的,不同的壁纸需要不同的类来完成其绘制,所以在切换壁纸的时候,实际指定的是一个新的壁纸绘制的工作类。
WallpaperManagerService 是运行在 system_server 里的,作为一个对外的接口和管理者。有些应用需要设置壁纸的时候(比如说“设置”、“壁纸”这类系统应用),就会获得 WallpaperManagerService 进行壁纸的设置。
设备上可能有多个不同种类的壁纸管理器,每个分别负责一个种类的壁纸,每种壁纸实际切换的逻辑以及具体的绘制都是在其内部进行的,WallpaperManagerService 只是在适当的时机切换当前正在运行的壁纸管理器(比如静态壁纸切换成动态壁纸),或者是通知当前的壁纸管理器切换一下壁纸(比如说换个图片壁纸)。
开发者在开发的时候,可以做些什么?
因为设置壁纸管理器只有有系统权限的应用才能设置,所以我们不能自己开发一个特殊的壁纸管理器然后使用。开发自定义的壁纸管理器的话,最多的使用场景就是在开发自己的 Android 操作系统的时候使用。比如可以开发一个特殊的壁纸展示,例如开发一个会根据当前时间展示不同光照方向的壁纸管理器。
不过普通应用是具有设置壁纸的权限的,可以通过 WallpaperManager 进行静态壁纸的设置。