Я прочитал некоторые документы о загрузчиках классов, но я все еще не уверен, где и зачем они нужны. API Android говорит:Правильное использование Classloader (особенно в Android)
Загружает классы и ресурсы из репозитория . Один или несколько загрузчиков классов установлены во время выполнения. Они относятся к , когда каждый раз, когда система времени выполнения нуждается в определенном классе, который еще не является , доступен в памяти.
Так что, если я понимаю это правильно, может быть много класслайдеров, которые несут ответственность за загрузку новых классов. Но как система решает, что использовать? И в какой ситуации разработчик должен создать экземпляр нового загрузчика классов?
В Android API для Намерения есть метод
public void setExtrasClassLoader (ClassLoader loader)
Описание говорит:
Устанавливает ClassLoader, который будет использоваться когда демаршаллизацией любых значения Parcelable из статистов в этом Намерение.
Могу ли я определить там специальный загрузчик классов, чтобы я мог передать объект с намерением, которые не определены в принимающей деятельности? Пример:
Если объект A, расположенный в проекте A (в Eclipse), определяет объект, который я хочу отправить в Activity B в Project B с помощью putExtra объекта Intent. Если этот объект, который отправляется через Intent, не определен (исходный код в проекте B), тогда существует исключение NoClassDefFoundException. Могу ли я использовать метод setExtraClassloader, чтобы избежать этого исключения? Если да, как я могу решить, какой объект classloader должен пройти? И как мне его правильно создать?
но если это невозможно, какова цель этого метода?? – RoflcoptrException
Для выполнения действительно причудливых трюков в рамках одного проекта. – CommonsWare
Пользовательские загрузчики классов обычно создают столько проблем, сколько они решают, поэтому они не являются хорошим местом для начала при попытке решить проблему. Если вы действительно хотите смутить, попробуйте выяснить, что делает Thread.setContextClassLoader. :-) – fadden