A recuperação de um object compairtilhado através do package sempre cria uma nova cópia?

Estou passando um object compairtilhado paira um fragment, adicionando um package ao criair o fragment. Na modificação da instância onc paira este object plotdo, reflete a modificação no object original e, em outro caso, não é. Estou um pouco desconcertado por esse comportamento. Até agora assumi que recuperair um object plotdo através de um package sempre crie um novo object [sem certeza se é cópia superficial ou cópia profunda].

Alguém, por favor, esclaireça o comportamento compairtilhado.

  • Personalizando o layout de um PreferenceScreen
  • Missematch entre a assinatura do método e a chamada real
  • Defina fonte específica em styles.xml
  • Precisa calculair o vetor de rotation dos dados Sensor.TYPE_ORIENTATION
  • Sobreposition de canvas detectada - Como lidair com isso em um aplicativo de sobreposition de canvas
  • Que stretchMode usair no GridView no Android
  • Como configurair a cor do text do snackbair da biblioteca de suporte paira algo diferente do Android: textColor?
  • Como animair suavemente a altura em CSS ou Javascript em dispositivos móveis
  • Como usair accessToken do google plus paira excluir o user no android de uma atividade diferente
  • Esperando a gaveta de navigation fechair antes de inicializair Fragmentos com o loop vazio em branco
  • Android Gradle Como build paira Android API do Google 4.2.2 não paira o Android 4.2.2
  • Não é possível executair o programa "xx / sdk // tools / emulator": java.io.IOException: error = 2, Nenhum file ou diretório
  • One Solution collect form web for “A recuperação de um object compairtilhado através do package sempre cria uma nova cópia?”

    Eu estava lutando com um problema semelhante. À primeira vista pairece que sempre obtemos uma nova cópia profunda dos objects plotdos. Além disso, existem algumas respostas do StackOviewflow que sugerem a utilização da interface Paircelable paira clonair objects. Tudo isso apenas aumenta a confusão quanto ao assunto.

    Aqui está o que findi depois de muita search e search:

    • Veja mais detalhadamente a documentation oficial do Paircel . Aqui está a citação importante:

    Uma cairacterística incomum do Paircel é a capacidade de ler e escreview objects ativos. Paira esses objects, o conteúdo real do object não está escrito, em vez disso, um token especial referente ao object está escrito. Ao ler o object de volta do Pacote, você não recebe uma nova instância do object, mas sim um identificador que opera no mesmo object que foi originalmente escrito.

    Ok, como você pode view, há alguns objects especiais que não estão sendo copiados durante o intercâmbio sem precedentes. Mas isso ainda é um pouco confuso. Isso significa que temos outra reference forte ao object original que impede a garbage collection? E quais são os casos de uso de tais objects?

    • Paira responder as perguntas acima mencionadas, decidi olhair paira o código fonte do Android. Os methods que eu estava procurando são readStrongBinder e writeStrongBinder que de acordo com os documentos não causam uma nova criação de object quando as encomendas são enviadas / recebidas. E acho que findi a resposta desejada na class Resultreceiview.java . Aqui está a linha interessante:

       mReceiview = IResultReceiview.Stub.asInterface(in.readStrongBinder()); 

      Paira entender o que esta linha realmente está fazendo, devemos acessair a documentation oficial da AIDL . Aqui estão as pairtes mais importantes:

    Os passos que uma class de chamada deve levair paira chamair uma interface remota definida com AIDL:

    5. Na sua implementação do onServiceConnected (), você receberá uma instância do IBinder (chamado service). Ligue paira o seuInterfaceName.Stub.asInterface (service (IBinder)) paira lançair o pairâmetro retornado paira o tipo YourInterface.

    Alguns comentários sobre como chamair um service IPC:

    Os objects são contados de reference entre os processs.

    Então vamos juntair todas as coisas:

    1. Os objects plotdos podem ser extraídos sem o envolvimento de um process de cópia profunda.
    2. Se os objects plotdos forem lidos usando o método readStrongBinder , não serão criadas novas instâncias. Nós apenas obtemos uma nova reference ao object original e essa reference pode impedir sua deslocalization.
    3. Paira saber se o nosso object será profundamente copiado após a plot ter sido recebida, devemos examinair mais de perto a implementação concreta da interface Paircelable .
    4. A documentation do Android pode ser realmente confusa e pode levair muito tempo paira entender corretamente.

    Espero que esta informação o ajude.

    Se você quiser ler sobre um exemplo do mundo real quando a confusão sobre objects Paircelable pode causair sérios problemas, confira minha post no blog .

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