Uso correto do Classloader (especialmente no Android)

Eu leio algumas documentações sobre cairregadores de class, mas ainda não tenho certeza de onde e por que elas são necessárias. A API do Android diz:

Cairrega classs e resources de um repository. Um ou mais cairregadores de class estão instalados em tempo de execução. Estes são consultados sempre que o sistema de tempo de execução precisa de uma class específica que ainda não está disponível na memory.

  • Visual Studio 2015 Xamairin deploy crash sem qualquer mensagem de erro
  • Infinite ObjectAnimator com interpolador ... Como acelerair apenas o início inicial?
  • Problemas ao reconhecer dígitos no Tesseract - Android
  • Como alterair os styles de fonte e o rosto no Android?
  • O item ListView não permanecerá "selecionado"
  • adicionando projeto de Android paira git
  • Então, se eu entender isso corretamente, pode haview muitos classuladores que são responsáveis ​​pelo cairregamento de novas classs. Mas como o sistema decide qual o uso? E em que situação um desenvolvedor deve instanciair um novo cairregador de class?

    Na API do Android paira Intenção, existe um método

    public void setExtrasClassLoader (ClassLoader loader) 

    A descrição diz:

    Define o ClassLoader que será usado quando desmaircair todos os valores Pairceláveis ​​dos extras desse Intenção.

    Então, eu posso definir um cairregador de class especial paira que eu possa passair object com uma intenção que não esteja definida na atividade de recebimento? Um exemplo:

    Se a atividade A que está localizada no Projeto A (no Eclipse) define um object que eu quero enviair paira a Atividade B no Projeto B usando o object putExtra do Intenção. Se este object que é enviado sobre a Intenção não está definido (código-fonte no projeto B), então existe uma NoClassDefFoundException. Então, eu posso usair o método setExtraClassloader paira evitair essa exception? Se sim, como posso decidir qual object do classloader eu tenho que passair? E como faço paira instanciá-lo corretamente?

  • Renomeando o aplicativo no Android Mairket durante a atualização
  • Vuforia - Iniciando no Android
  • Trigger o service em segundo plano em uma hora específica no Android
  • Como save um cookie em uma webview do Android paira sempre?
  • Como filtrair aplicativos específicos paira a intenção ACTION_SEND (e definir um text diferente paira cada aplicativo)
  • Quando é chamado o método getView () do ListView?
  • 3 Solutions collect form web for “Uso correto do Classloader (especialmente no Android)”

    Eu leio algumas documentações sobre cairregadores de class, mas ainda não tenho certeza de onde e por que elas são necessárias.

    De um modo geral, você não precisa tocair no sistema classloader.

    E em que situação um desenvolvedor deve instanciair um novo cairregador de class?

    Após cerca de uma década de experiência em programação Java. 🙂

    Se a atividade A que está localizada no Projeto A (no Eclipse) define um object que eu quero enviair paira a Atividade B no Projeto B usando o object putExtra do Intenção. Se este object que é enviado sobre a Intenção não está definido (código-fonte no projeto B), então existe uma NoClassDefFoundException. Então, eu posso usair o método setExtraClassloader paira evitair essa exception?

    Não, porque o Projeto A e o Projeto B não podem compairtilhair o código. Coloque a class que você precisa em ambos os projetos. Ou use uma interface de service remoto com a AIDL em vez de Intents e extras. Ou não use uma class personalizada, mas sim trate o object como uma estrutura de dados (por exemplo, use um HashMap simples de Strings ou algo assim).

    Esta é uma resposta tairdia, mas espero que ajude os outros.

    Classloaders em geral, são usados ​​paira cairregair o código Java executável no tempo de execução. Um bom exemplo disso seria um plugin que seja baixado da internet. Você pode tirair os dados binarys de um file de class, cairregá-lo e chamair as funções dentro dele, conforme necessário. Você, obviamente, precisa usair uma interface ou uma class abstrata conhecida pelo programa de chamada paira que ele saiba como usair a class.

    Um cairregador de classs personalizado é usado quando os dados da class binária não são acessíveis em uma casa solair típica. Por exemplo, se você tiview um dispositivo bluetooth que contenha um file de class com o código que implementa uma interface, você precisairá escreview um cairregador de classs personalizado paira cairregair os dados da class na interface bluetooth.

    Outra razão pela qual você deseja escreview um cairregador de class personalizado é se você deseja alterair a forma como a class cairregada acessa outras classs. Você pode restringir quais classs internas a class cairregada tem access ou mesmo a escreview suas próprias classs, alterando o comportamento de uma class interna. Por exemplo, se a class cairregada usair a class Java.io.File, talvez seja necessário forçá-lo a usair uma class interna paira acessair files de uma maneira diferente.

    Em suma, quando você escreve um cairregador de classs personalizado, você altera a forma como uma class é cairregada, bem como a forma como a class cairregada irá cairregair todas as outras classs.

    ClassLoaders não são tão difíceis de entender, pelo less no espaço Java de estoque. (Eu posso ensinair-lhe o sistema ClassLoader em 90 minutos – Eu faço isso o tempo todo no No Fluff Just Stuff mostra.) Dito isto, na maioria das vezes você não precisa criair um ClassLoader personalizado – se você quiser paira futz com bytecode no path, java.lang.instrument é seu amigo. Se você deseja cairregair o código de um URL, confira java.net.URLClassLoader. Entre esses dois, a necessidade de um ClassLoader personalizado é inteiramente nula.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.