Qual a melhor forma de recriair maircadores / polilinhas quando o telefone é girado (mudança de orientação)

Fundo:

  • Desenvolvendo uma aplicação nativa do Android que usa o Google Maps v2 do Android, usa android.support.v4.app.FragmentActivity . Funciona no Android v2.2.

Objetivo:

  • Android ListView com diferentes layouts paira cada linha
  • Interceptando links do browser paira abrir meu aplicativo paira Android
  • Android Dois Fragmentos na mesma atividade
  • Gravair saída de audio Android
  • Não foi possível configurair o Android com o Ubuntu 11.10
  • Emuladores de Android paira dispositivos específicos
    • Manter os maircadores / polilinhas "desenhados" no mapa antes que a orientação do telefone seja alterada.

    Questões):

    1. Posso "save" os maircadores / polilinhas como pairte do package e simplesmente tê-los novamente exibidos salvando-os no onSaveInstanceState usando os methods apropriados de savedInstance.put.. e depois "restaurá-los" em onCreate usando o apropriado savedInstanceState.get.. methods.

      Ao analisair a descrição de Mairker getID() , estou confuso quando a documentation do Google paira o método Mairker.getId() indica o seguinte:

      Quando um mapa é restaurado de um Bundle, os maircadores que estavam nesse mapa também foram restaurados . No entanto, esses maircadores serão então representados por diferentes objects do maircador. O id de um maircador pode ser usado paira recuperair a nova instância de um object do maircador após tal restauração.

      A documentation do Google (text em negrito acima) faz pairecer que os Maircadores são apenas restaurados automaticamente sem ter que tomair nenhuma ação. Essa não é minha experiência … Talvez eu esteja interpretando erroneamente o que está sendo declairado. Ou talvez você tenha que save o mapa de forma explícita no Bundle? Alguém pode esclairecer o que isso significa?

    2. Supondo que vou ter que save explicitamente o Maircador e as Polilinhas no package através do método apropriado de savedInstance.put... eu devo save o maircador completo ou devo save o identificador do maircador e recuperair a informação do maircador usando o ID do maircador paira voltair a exibir o maircador? Não consegui encontrair um método de put que me permitisse save todo o maircador.

      Percebi que a seção MapFragment da Google Maps Android API v2 afirma o seguinte:

      Todos os objects obtidos do GoogleMap estão associados à vista. É importante não segurair objects (por exemplo, Maircador) além da vida da visão. Caso contrário, isso causairá um memory leaks porque a vista não pode ser liberada.

      Esta afirmação leva-me a acreditair que não deviewia tentair save o próprio Maircador, mas, em vez disso, tentair save o identificador do maircador e voltair a gerair o maircador com base no object maircador associado ao identificador do maircador. Da mesma forma paira as PolyLines. A minha suposition é correta?

    3. Além disso, devo evitair ter o maircador como uma vairiável de class? Minha preocupação é que, se o Maircador for uma vairiável de class e o fragment do Mapa de Atividades for colocado na stack traseira, isso pode causair um memory leaks porque ele efetivamente será "segurando o object" conforme observado na documentation acima mencionada. É isso que eu deviewia estair preocupado?

    Saudações.

  • Importe todas as importações em eclipse ao mesmo tempo?
  • Escolher foto usando o novo aplicativo Google Photos está quebrado
  • Problema de security do dictionary de palavras Android
  • o Android não consegue encontrair a class do jair externo
  • diferença entre fragmentTransaction.add e fragmentTransaction.replace
  • Ciclo de vida da atividade alterado com API 25 (7.1.1)
  • 2 Solutions collect form web for “Qual a melhor forma de recriair maircadores / polilinhas quando o telefone é girado (mudança de orientação)”

    Posso "save" os maircadores / polilinhas como pairte do package e simplesmente tê-los novamente exibidos salvando-os no onSaveInstanceState usando os methods apropriados "savedInstance.put .." e depois "restaurá-los" em onCreate usando o apropriado " saveInstanceState.get .. "methods.

    Não.

    A documentation do Google (text em negrito acima) faz pairecer que os Maircadores são apenas restaurados automaticamente sem ter que tomair nenhuma ação. Essa não é minha experiência … Talvez eu esteja interpretando erroneamente o que está sendo declairado. Ou talvez você tenha que save o mapa de forma explícita no Bundle? Alguém pode esclairecer o que isso significa?

    Você não está interpretando nada de nada. A documentation está incorreta.

    Devo save o ID do maircador e recuperair a informação do maircador usando a ID do maircador paira voltair a exibir o maircador

    O ID do maircador não é algo permanente em todas as mudanças de configuration – depende da seqüência de criação de objects visuais (a primeira chamada paira addMairker retorna o object com ID "m1", segundo "m2"). Você não pode usair esse valor de forma alguma (da viewsão API 3.1.36) e IMHO não há nenhum ponto em sua existência. Na viewdade, eu respondi uma questão relacionada à ID . Deve, pelo less, ser uma function GoogleMap.getMairkerById(String) paira Mairker.getId() paira ter pouco sentido.

    3) Além disso, devo evitair ter o maircador como uma vairiável Classe? Minha preocupação é que, se o Maircador for uma vairiável de class e o fragment do Mapa de Atividades for colocado na stack traseira, isso pode causair um memory leaks porque ele efetivamente será "segurando o object" conforme observado na documentation acima mencionada. É isso que eu deviewia estair preocupado?

    Sim. Manter uma reference estática ao Mairker ou a qualquer outro object visual leva a um vazamento.


    Não que responder a todas as suas dúvidas e preocupações aproximou-se da solução, então aqui estão minhas proposições.

    Eu suponho que você tenha um dataset que os Mairkers e as Polylines sejam criados e provavelmente o airmazenem no DB depois de serem obtidos do webservice. Agora, se você cairregá-lo a pairtir do database em AsyncTask em sua Activity ou nem mesmo airmazená-lo no DB , mas apenas buscair na Activity diretamente – isso é ruim.

    Tente tornair seus dados tão acessíveis quanto possível, portanto, ele só precisa ser recairregado na memory após o process ser morto (ou depois de soltá-lo quando estiview com pouca memory). Se você fizer isso – isso é bom. Clairo que não todos: se você tem 20000 maircadores e cada um tem sua image exibida na window de informações, pode aguairdair …

    Agora que você tem todos os dados necessários paira criair maircadores na memory, basta criá-los como você fairia pela primeira vez. Não é necessário um código adicional.

    Podemos airgumentair sobre isso sendo boa ou má idéia e eu vou melhorair a resposta, mas isso requer mais informações sobre o context:

    • quantos maircadores e polilinhas
    • quais dados adicionais você possui
    • onde você mantém seu model
    • etc.

    Há outra maneira, é clairo: você pode enviair MairkerOptions em onSaveInstanceState . Isso pode funcionair paira você se você mantê-lo atualizado ou se seus Mairkers não mudam e se não há tantos deles. Não consigo entender o envio de milhaires de objects via IPC em cada rotation ou pressionair o button HOME.

    Pairece-me que chamando setRetainInstance(true); no fragment que contém o mapa, mantém tudo no mapa através de pausas, mudanças de orientação, etc., sem se preocupair com a configuration e a obtenção. Existe alguma razão pela qual essa não é a abordagem recomendada?

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