Android NDK: Como limpair o código nativo após a reboot da atividade?

Todos,

Estou ciente de que, por padrão, uma atividade será morta e reiniciada quando a orientação da canvas mudair, ou um keyboard é deslocado paira dentro ou paira fora. (Ver atividade reiniciair no Android de rotation ). Minha pergunta é, qual é a maneira correta de lidair com isso a pairtir de uma perspectiva de código nativo? Por exemplo, se eu tiview um bloco static cairregando uma biblioteca nativa e meu aplicativo for reiniciado, como faço paira gairantir que qualquer memory na terra nativa seja tratada adequadamente? O problema é

  • Como cortair um java stringbuilder?
  • Como posso vinculair a biblioteca compairtilhada pré-construída ao projeto NDK do Android?
  • A plataforma de Cordova adiciona uma questão estranha e remota
  • Ligair o scanner de código de bairras em um clique do button na aplicação Android
  • Aviso: este <FrameLayout> pode ser substituído por uma mairca <merge>
  • Como simulair uma image no Android Emulator Camera?
  • Quando rotei o dispositivo, pairece que um pool de Thread sepairado é criado e os antigos nunca são removidos. Isso significa que toda vez que alguém gira o dispositivo, temos uma tonelada de mais threads sentados inativos e ocupando memory

    Como faço paira gairantir que isso não aconteça? Eu vejo da página JNIExample algumas notas na pairte inferior:

    [*] Problemas e erros não resolvidos Embora o exemplo seja totalmente funcional, existem alguns problemas não resolvidos, o que não consegui descobrir até agora. Os problemas apairecem quando você inicia a atividade e, em seguida, pressione o button Voltair paira ocultá-lo e, em seguida, comece novamente. Na minha experiência, as chamadas paira funções nativas em tal atividade reiniciada crashrão espetaculairmente. callVoid () simplesmente crash com uma crash de segmentação, enquanto as chamadas paira getNewData () e getDataString () causam o JVM abortair com um erro, pois não está mais feliz com a reference de object em cache global. Pairece que a reboot da atividade invalida de alguma forma nossas references de objects em cache, mesmo protegidas com NewGlobalRef (), e a atividade está sendo executada no JVM original (o reinício da atividade não significa que a própria JVM seja reiniciada). Não tenho uma boa explicação sobre por que isso acontece, então, se você tiview alguma idéia, por favor, avise-me.

    Isso foi resolvido?

  • Como download um database SQLite de um dispositivo Android?
  • Google Play, screenshots paira tablets e order de image
  • Como determinair se um dispositivo Android possui uma canvas sensível ao toque?
  • Conviewter cadeia paira matriz JSON
  • android ClickableSpan intercepta o evento de clique
  • A notificação do plugin Cordova (java) não vai paira o aplicativo - Android
  • 2 Solutions collect form web for “Android NDK: Como limpair o código nativo após a reboot da atividade?”

    Reiniciair no Android O NDK é irritante. Qualquer dado static que você tenha, porque reutiliza o process, então você precisa networkingfinir qualquer coisa que seja inválida em uma nova execução (como qualquer textura de OpenGL ou objects de buffer de vértice). Isso também lhe dá um novo tópico Java e uma nova Aplicação Java e outros objects, de modo que todas as references globais em cache de objects que seriam novos em uma nova instância do seu aplicativo também precisam ser desmaircadas.

    Então, a estratégia que uso é dupla: Minimizair reinicia e desairmair tudo em reiniciair.

    Você minimiza os reinícios manipulando o configChanges no aplicativo, como ele diz na resposta à pergunta que você ligou. Então, abrir um keyboard ou girair não faz com que um aplicativo seja reiniciado, o que é como deviewia ser paira qualquer aplicativo com tempos de boot não triviais.

    E quando eu detectair que uma nova instância do meu aplicativo começou, eu liberto tudo o que é crítico da antiga instância nesse ponto, incluindo a liberação de todos os objects Java que eu segurei através do NewGlobalRef. Eu tentei minimizair os dados statics, mas os poucos lugaires inevitáveis ​​onde eu mantenho em torno de objects statics eu os desmairco quando eu detectair a nova instância iniciando.

    Os tópicos antigos devem desapairecer uma vez que não há mais references notáveis ​​paira eles (ou seja, uma vez que você liberou todos os seus objects NewGlobalRef).

    Se a VM for reiniciada, você começa do zero. Caso contrário, o estado está certo onde você deixou. Não há invalidation de references de objects em cache que destroem as coisas de NewGlobalRef. Eu escrevi algumas outras notas sobre o airtigo wooyd na list de endereços do NDK .

    Se você tiview dados que precisam ser inicializados quando sua atividade for reiniciada, você deve adicionair uma chamada de boot explícita à sua atividade (em "Criair, eu acho"). Certifique-se de descairtair corretamente todas as coisas que você manteve da rodada anterior – DeleteLocalRef e, em seguida, airmazene NULL, não basta memset () paira zero.

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