欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Android 记录锁屏的上层相关源码以及debug WindowManager

Android 记录锁屏的上层相关源码以及debug WindowManager

2025/4/20 13:03:36 来源:https://blog.csdn.net/qq_30883899/article/details/140540386  浏览:    关键词:Android 记录锁屏的上层相关源码以及debug WindowManager

SettingsProvider

  • frameworks/base/packages/SettingsProvider/res/values/defaults.xml
  • device/rockchip/rk356x/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
//device的overlay会覆盖frameworks的SettingsProvider
// 关于锁屏配置<integer name="def_screen_off_timeout">0x60000</integer><bool name="def_lockscreen_disabled">false</bool>

KeyGuard

  • frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
final int type = attrs.type;// This function assumes that the contents of the default display are processed first// before secondary displays.final DisplayContent displayContent = w.getDisplayContent();if (displayContent != null && displayContent.isDefaultDisplay) {// While a dream or keyguard is showing, obscure ordinary application content on// secondary displays (by forcibly enabling mirroring unless there is other content// we want to show) but still allow opaque keyguard dialogs to be shown.if (w.isDreamWindow() || mWmService.mPolicy.isKeyguardShowing()) {mObscureApplicationContentOnSecondaryDisplays = true;}displayHasContent = true;} else if (displayContent != null &&(!mObscureApplicationContentOnSecondaryDisplays|| (obscured && type == TYPE_KEYGUARD_DIALOG))) {// Allow full screen keyguard presentation dialogs to be seen.displayHasContent = true;}if ((privateflags & PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE) != 0) {mSustainedPerformanceModeCurrent = true;}

FallbackHome

  • frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

//box:skip FallbackHome to fix 2-3s black screen before launcher.if (!"box".equals(SystemProperties.get("ro.target.product"))) {if (!mBootAnimationStopped) {Trace.asyncTraceBegin(TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0);// stop boot animation// formerly we would just kill the process, but we now ask it to exit so it// can choose where to stop the animation.SystemProperties.set("service.bootanim.exit", "1");mBootAnimationStopped = true;}if (!mForceDisplayEnabled && !checkBootAnimationCompleteLocked()) {ProtoLog.i(WM_DEBUG_BOOT, "performEnableScreen: Waiting for anim complete");return;}try {IBinder surfaceFlinger = ServiceManager.getService("SurfaceFlinger");if (surfaceFlinger != null) {ProtoLog.i(WM_ERROR, "******* TELLING SURFACE FLINGER WE ARE BOOTED!");Parcel data = Parcel.obtain();data.writeInterfaceToken("android.ui.ISurfaceComposer");surfaceFlinger.transact(IBinder.FIRST_CALL_TRANSACTION, // BOOT_FINISHEDdata, null, 0);data.recycle();}} catch (RemoteException ex) {ProtoLog.e(WM_ERROR, "Boot completed: SurfaceFlinger is dead!");}}

调试

  • frameworks/base/services/core/java/com/android/server/wm/WindowManagerDebugConfig.java
    打开对应日志打印,来debug WindowManager
    static final String TAG_WM = "WindowManager";static final boolean DEBUG = false;static final boolean DEBUG_ANIM = false;static final boolean DEBUG_LAYOUT = false;static final boolean DEBUG_LAYERS = false;static final boolean DEBUG_INPUT = false;static final boolean DEBUG_INPUT_METHOD = false;static final boolean DEBUG_VISIBILITY = false;static final boolean DEBUG_CONFIGURATION = false;static final boolean DEBUG_STARTING_WINDOW_VERBOSE = false;static final boolean DEBUG_WALLPAPER = false;static final boolean DEBUG_WALLPAPER_LIGHT = false || DEBUG_WALLPAPER;static final boolean DEBUG_DRAG = false;static final boolean DEBUG_SCREENSHOT = false;static final boolean DEBUG_LAYOUT_REPEATS = false;static final boolean DEBUG_WINDOW_TRACE = false;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词