基于Android9.0(API Level: 28)源码分析。
涉及代码:
/frameworks/base/services/core/java/com/android/server/dreams/DreamManagerService.java
/frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
/frameworks/base/services/core/java/com/android/server/dreams/DreamController.java
/frameworks/base/core/java/android/service/dreams/DreamService.java
/packages/apps/DeskClock/src/com/android/deskclock/Screensaver.java // 系统默认屏保service
Android屏保是什么?
可能我们从屏保画面来看会认为屏保是一个activity,但是实际上屏保画面显示是通过service显示的。屏保启动时会bind屏保service(DreamService),然后在service上创建PhoneWindow显示在画面上。具体可以用实机验证。当屏保显示时,通过adb去dumpsys window看看屏保是不是activity。
Android屏保启动方式
一、主动启动屏保。
IDreamManager mDreamManager = IDreamManager.Stub.asInterface(ServiceManager.getService(DreamService.DREAM_SERVICE));</