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_FINISHED
                            data, 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;

相关推荐

  1. Android人脸解解析

    2024-07-21 10:34:01       15 阅读
  2. Android 界面启动流程

    2024-07-21 10:34:01       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 10:34:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 10:34:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 10:34:01       45 阅读
  4. Python语言-面向对象

    2024-07-21 10:34:01       55 阅读

热门阅读

  1. C语言MAX_PATH和PATH_MAX的区别

    2024-07-21 10:34:01       15 阅读
  2. jEasyUI 创建简单窗口

    2024-07-21 10:34:01       18 阅读
  3. TMS320F28335多级中断及中断响应过程

    2024-07-21 10:34:01       13 阅读
  4. 微信小程序反编译工具安装【PC端程序包详解】

    2024-07-21 10:34:01       16 阅读
  5. 磁盘IO挂起(Disk IO hang)

    2024-07-21 10:34:01       16 阅读
  6. 昇思22天

    2024-07-21 10:34:01       14 阅读
  7. Pageable 和PageRequest什么区别

    2024-07-21 10:34:01       11 阅读
  8. CyclicBarrier循环栅栏介绍和使用

    2024-07-21 10:34:01       13 阅读
  9. Python常用的数据类型

    2024-07-21 10:34:01       12 阅读
  10. Android笔试面试题AI答之控件Views(1)

    2024-07-21 10:34:01       14 阅读