Ho letto alcune documentazioni su classloader, ma im ancora non è sicuro dove e perché sono necessari. L'API di Android dice:uso corretto del programma di caricamento classi (soprattutto in Android)
Carica classi e risorse da un repository . Uno o più caricatori di classe sono installati in fase di esecuzione. Questi sono consultati ogni volta che il sistema di runtime ha bisogno di una classe specifica che non è ancora disponibili in memoria.
Quindi, se ho capito questo corretto, ci possono essere molte classlaoders che sono responsabili per il caricamento di nuove classi. Ma come il sistema decide quale usare? E in quale situazione dovrebbe uno sviluppatore istanziare un nuovo classloader?
Nel API Android per Intent c'è un metodo
public void setExtrasClassLoader (ClassLoader loader)
La descrizione dice:
Imposta il ClassLoader che verrà utilizzato quando unmarshalling eventuali Parcelable valori dalle comparse di questo Intent.
Quindi posso definire uno speciale classloader in modo che possa passare l'oggetto con un Intent che non sono definiti nell'attività di ricezione? Un esempio:
Se l'attività A che si trova nel Progetto A (in Eclipse) definisce un oggetto che voglio inviare all'attività B nel Progetto B usando putExtra dell'oggetto Intent. Se l'oggetto che viene inviato attraverso l'intento non è definito (codice sorgente nel progetto B), allora c'è un NoClassDefFoundException. Quindi posso usare il metodo setExtraClassloader per evitare questa eccezione? Se sì, come posso decidere quale oggetto classloader devo passare? E come posso istanziarlo correttamente?
ma se questo non è possibile, qual è lo scopo di questo metodo? – RoflcoptrException
Per fare alcuni trucchi davvero fantasiosi all'interno di un singolo progetto. – CommonsWare
I programmi di caricamento di classi personalizzate di solito creano tutti i problemi che risolvono, quindi non sono un buon punto di partenza quando si cerca di risolvere un problema. Se vuoi davvero essere confuso, prova a capire cosa fa Thread.setContextClassLoader. :-) – fadden