Dalvik classloader之谜

kel*_*ogs 4 android static-block classloader dalvik

我在Adnroid 2.2 SDK上,无法在MultiUserChat类中获取我的静态块来执行.我试图强制加载它

try 
{
    String qual = MultiUserChat.class.getName();
    ClassLoader.getSystemClassLoader().loadClass(qual);

} catch (ClassNotFoundException e) {

    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

它总是击中捕获块.'qual'获得该类的有效名称......它可以是什么?

Jes*_*son 9

您的应用程序包括ArrayList和Activity等框架类,以及FlashlightActivity等应用程序类.框架类由系统类加载器(以及引导类loadeR)加载; 应用程序类由应用程序类加载器加载.

系统类加载器只能看到系统类.它不知道应用程序类路径,也不能用于加载应用程序类.您需要使用应用程序类加载器来执行此操作.获取应用程序类加载器引用的最简单方法是通过应用程序类:

try {
    String qual = MultiUserChat.class.getName();
    MyActivity.class.getClassLoader().loadClass(qual);
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)