Dalvik classloader mystery - PullRequest
       22

Dalvik classloader mystery

4 голосов
/ 15 января 2012

Я нахожусь на Adnroid 2.2 SDK и не могу выполнить мой статический блок в классе MultiUserChat.Я попытался принудительно загрузить его как

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

} catch (ClassNotFoundException e) {

    e.printStackTrace();
}

, и он всегда попадает в блок захвата.'qual' получает действительное имя класса ... что это может быть?

1 Ответ

9 голосов
/ 15 января 2012

Ваше приложение включает в себя как классы инфраструктуры, такие как ArrayList и Activity, так и классы приложений, такие как FlashlightActivity Каркасные классы загружаются загрузчиком классов system (а также классом начальной загрузки loadeR); классы приложений загружаются загрузчиком классов application .

Загрузчик системных классов может видеть только системные классы. Он не знает путь к классу приложения и не может использоваться для загрузки классов приложения. Для этого вам нужно использовать загрузчик классов приложений. Самый простой способ получить ссылку на загрузчик класса приложения - через класс приложения:

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