上海市建设厅网站,营销型网站建设制作推广,阿里巴巴集团官网,企业网站建设合作合同下面是一份 Android 类加载器双亲委派机制的时序图示例#xff0c;描述了当应用调用 loadClass() 时#xff0c;各个加载器之间的委派过程。 #mermaid-svg-rBdlhpD2uRjBPiG8 {font-family:trebuchet ms,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mer…下面是一份 Android 类加载器双亲委派机制的时序图示例描述了当应用调用 loadClass() 时各个加载器之间的委派过程。 #mermaid-svg-rBdlhpD2uRjBPiG8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rBdlhpD2uRjBPiG8 .error-icon{fill:#552222;}#mermaid-svg-rBdlhpD2uRjBPiG8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rBdlhpD2uRjBPiG8 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-rBdlhpD2uRjBPiG8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rBdlhpD2uRjBPiG8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rBdlhpD2uRjBPiG8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rBdlhpD2uRjBPiG8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rBdlhpD2uRjBPiG8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rBdlhpD2uRjBPiG8 .marker.cross{stroke:#333333;}#mermaid-svg-rBdlhpD2uRjBPiG8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rBdlhpD2uRjBPiG8 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-rBdlhpD2uRjBPiG8 text.actortspan{fill:black;stroke:none;}#mermaid-svg-rBdlhpD2uRjBPiG8 .actor-line{stroke:grey;}#mermaid-svg-rBdlhpD2uRjBPiG8 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-rBdlhpD2uRjBPiG8 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-rBdlhpD2uRjBPiG8 #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-rBdlhpD2uRjBPiG8 .sequenceNumber{fill:white;}#mermaid-svg-rBdlhpD2uRjBPiG8 #sequencenumber{fill:#333;}#mermaid-svg-rBdlhpD2uRjBPiG8 #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-rBdlhpD2uRjBPiG8 .messageText{fill:#333;stroke:#333;}#mermaid-svg-rBdlhpD2uRjBPiG8 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-rBdlhpD2uRjBPiG8 .labelText,#mermaid-svg-rBdlhpD2uRjBPiG8 .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-rBdlhpD2uRjBPiG8 .loopText,#mermaid-svg-rBdlhpD2uRjBPiG8 .loopTexttspan{fill:black;stroke:none;}#mermaid-svg-rBdlhpD2uRjBPiG8 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-rBdlhpD2uRjBPiG8 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-rBdlhpD2uRjBPiG8 .noteText,#mermaid-svg-rBdlhpD2uRjBPiG8 .noteTexttspan{fill:black;stroke:none;}#mermaid-svg-rBdlhpD2uRjBPiG8 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-rBdlhpD2uRjBPiG8 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-rBdlhpD2uRjBPiG8 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-rBdlhpD2uRjBPiG8 .actorPopupMenu{position:absolute;}#mermaid-svg-rBdlhpD2uRjBPiG8 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-rBdlhpD2uRjBPiG8 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-rBdlhpD2uRjBPiG8 .actor-man circle,#mermaid-svg-rBdlhpD2uRjBPiG8 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-rBdlhpD2uRjBPiG8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Client App ClassLoader (DexClassLoader/PathClassLoader) Parent ClassLoader (PathClassLoader) BootClassLoader 应用代码调用加载请求 loadClass(TargetClass) 1. 检查是否已加载 2. 未加载则委派父加载器 loadClass(TargetClass) 1. 继续委派给父加载器 BootClassLoader loadClass(TargetClass) 1. 查找系统核心类 2. 若未找到抛异常 返回Class对象 ClassNotFoundException alt [类存在] [类不存在] ClassNotFoundException 父类加载失败 尝试自行加载 findClass(TargetClass) 返回Class对象 ClassNotFoundException alt [加载成功] [加载失败] 返回Class对象 返回Class对象 alt [父类返回异常] [父类返回Class] Client App ClassLoader (DexClassLoader/PathClassLoader) Parent ClassLoader (PathClassLoader) BootClassLoader 图中说明
Client表示发起加载请求的调用者例如应用代码。App ClassLoader (Custom/DexClassLoader)应用默认的加载器如 PathClassLoader 或 DexClassLoader负责加载应用自身的类。Parent ClassLoader (PathClassLoader)上一级加载器负责加载部分系统类库和共享组件。Boot ClassLoader最高层加载器用于加载 Android 系统核心类如 java.lang.、android. 等。
流程解释
应用通过 App ClassLoader 调用 loadClass(TargetClass)。App ClassLoader 首先检查自己是否已经加载该类若未加载则将请求委派给父加载器Parent ClassLoader。Parent ClassLoader 同样采用双亲委派将请求向上委派给 Boot ClassLoader。Boot ClassLoader 尝试在系统核心库中查找该类如果找到则返回相应的 Class 对象否则抛出 ClassNotFoundException。结果依次向下传递最终 App ClassLoader 返回给 Client。
这种双亲委派模型确保了系统核心类优先加载、避免用户自定义类覆盖系统类从而保证了 Java/Android 的安全性和稳定性。