PolicyManager.java

本文深入解析了Android系统中PolicyManager类的功能与实现细节,重点介绍了其静态方法如何创建特定策略对象,如WindowManagerPolicy和FallbackEventHandler,并展示了这些方法的具体应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

frameworks/base/core/java/com/android/internal/policy/PolicyManager.java

public final class PolicyManager {
    private static final String POLICY_IMPL_CLASS_NAME =
        "com.android.internal.policy.impl.Policy";

    private static final IPolicy sPolicy;

    static {
        // Pull in the actual implementation of the policy at run-time
        try {
            Class policyClass = Class.forName(POLICY_IMPL_CLASS_NAME);
            sPolicy = (IPolicy)policyClass.newInstance();
        } catch (ClassNotFoundException ex) {
            throw new RuntimeException(
                    POLICY_IMPL_CLASS_NAME + " could not be loaded", ex);
        } catch (InstantiationException ex) {
            throw new RuntimeException(
                    POLICY_IMPL_CLASS_NAME + " could not be instantiated", ex);
        } catch (IllegalAccessException ex) {
            throw new RuntimeException(
                    POLICY_IMPL_CLASS_NAME + " could not be instantiated", ex);
        }   
    }   

    // Cannot instantiate this class
    private PolicyManager() {}

    // The static methods to spawn new policy-specific objects
    public static Window makeNewWindow(Context context) {
        return sPolicy.makeNewWindow(context);
    }   

    public static LayoutInflater makeNewLayoutInflater(Context context) {
        return sPolicy.makeNewLayoutInflater(context);
    }   

    public static WindowManagerPolicy makeNewWindowManager() {
        return sPolicy.makeNewWindowManager();
    }   

    public static FallbackEventHandler makeNewFallbackEventHandler(Context context) {
        return sPolicy.makeNewFallbackEventHandler(context);
    }   
}

PolicyManager.makeNewWindowManager()在frameworks/base/services/java/com/android/server/wm/WindowManagerService.java中被调用。

PolicyManager.makeNewFallbackEventHandler()在frameworks/base/core/java/android/view/ViewRootImpl.java中被调用。

它们的实现在Policy.java里面。

frameworks/base/policy/src/com/android/internal/policy/impl/Policy.java

// Simple implementation of the policy interface that spawns the right
// set of objects
public class Policy implements IPolicy {
    private static final String TAG = "PhonePolicy";

    private static final String[] preload_classes = {
        "com.android.internal.policy.impl.PhoneLayoutInflater",
        "com.android.internal.policy.impl.PhoneWindow",
        "com.android.internal.policy.impl.PhoneWindow$1",
        "com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback",
        "com.android.internal.policy.impl.PhoneWindow$DecorView",
        "com.android.internal.policy.impl.PhoneWindow$PanelFeatureState",
        "com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState",
    };

    static {
        // For performance reasons, preload some policy specific classes when
        // the policy gets loaded.     
        for (String s : preload_classes) { 
            try {
                Class.forName(s);          
            } catch (ClassNotFoundException ex) {
                Log.e(TAG, "Could not preload class for phone policy: " + s);
            }
        }
    }

    public Window makeNewWindow(Context context) {
        return new PhoneWindow(context);
    }

    public LayoutInflater makeNewLayoutInflater(Context context) {
        return new PhoneLayoutInflater(context);
    }

    public WindowManagerPolicy makeNewWindowManager() {
        return new PhoneWindowManager();
    }

    public FallbackEventHandler makeNewFallbackEventHandler(Context context) {
        return new PhoneFallbackEventHandler(context);
    }
}

可以看出makeNewWindowManager()返回的是WindowManagerPolicy类型,由PhoneWindowManager()得到。

makeNewFallbackEventHandler()返回的是FallbackEventHandler类型,由PhoneFallbackEventHandler()得到。

PhoneWindowManager继承自WindowManagerPolicy,WindowManagerPolicy是一个接口。

public interface WindowManagerPolicy {
    // Policy flags.  These flags are also defined in frameworks/base/include/ui/Input.h.
    public final static int FLAG_WAKE = 0x00000001;
    public final static int FLAG_WAKE_DROPPED = 0x00000002;

“lookout_sdk_core_init_thread” prio=10 tid=47 Native | group=“main” sCount=1 ucsCount=0 flags=1 obj=0x21c8c08 self=0xb400007102ef1400 | sysTid=18165 nice=-8 cgrp=top-app sched=0/0 handle=0x7054c62730 | state=S schedstat=( 6015974059 3856182817 8208 ) utm=477 stm=124 core=7 HZ=100 | stack=0x7054b5f000-0x7054b61000 stackSize=1037KB | held mutexes= native: #00 pc 000bcdec /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28) (BuildId: b7f4e1a1a9aa344078dea2adbdc1dc27) native: #01 pc 00201230 /apex/com.android.art/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks+136) (BuildId: 80d2ab18f9d259d8e546c1e6bae752b1) native: #02 pc 0080c1c0 /apex/com.android.art/lib64/libart.so (art::JNI::NewStringUTF+3536) (BuildId: 80d2ab18f9d259d8e546c1e6bae752b1) native: #03 pc 004eeb44 /data/app/~~PVuAHIWoFw_YLCJabBtd0Q==/com.snapwork.hdfc-6PVpWMBM8niI0BwH0t3dkA==/lib/arm64/libsnapwork_hdfc.so (???) (BuildId: d2128dce7cb5d9c29d1034a45db4aaff32ba7c82) native: #04 pc 004ee8a4 /data/app/~~PVuAHIWoFw_YLCJabBtd0Q==/com.snapwork.hdfc-6PVpWMBM8niI0BwH0t3dkA==/lib/arm64/libsnapwork_hdfc.so (???) (BuildId: d2128dce7cb5d9c29d1034a45db4aaff32ba7c82) native: #05 pc 001afdb4 /data/app/~~PVuAHIWoFw_YLCJabBtd0Q==/com.snapwork.hdfc-6PVpWMBM8niI0BwH0t3dkA==/lib/arm64/libsnapwork_hdfc.so (???) (BuildId: d2128dce7cb5d9c29d1034a45db4aaff32ba7c82) at jfnmqbyj.at.a(Native method) at com.lookout.security.threatnet.policy.v3.KnowledgeBaseLoader.loadAssessment(SourceFile:2) at com.lookout.security.threatnet.policy.v3.KnowledgeBaseLoader.load(SourceFile:2) at com.lookout.security.threatnet.policy.v3.KnowledgeBaseLoader.load(SourceFile:1) at com.lookout.policymanager.internal.d.a(unavailable:123) at com.lookout.policymanager.internal.c.a(unavailable:71) at com.lookout.policymanager.internal.c.a(unavailable:12) at com.lookout.policymanager.internal.c.a(SourceFile:14) at com.lookout.policymanager.internal.e.getDeviceSettings(unavailable:2) at com.lookout.sdkcoresecurity.internal.j0.shouldHandleAuthError(unavailable:22) at com.lookout.sdkcoresecurity.internal.z.run(unavailable:67) locked <0x036c502a> (a com.lookout.sdkcoresecurity.internal.SdkCoreSecurityStarter) at java.lang.Thread.run(Thread.java:1119) DumpLatencyMs: 237.569
最新发布
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值