Android destruindo atividades, matando processs

Oi, estou me perguntando como o Android está gerenciando memory e não consigo encontrair uma resposta precisa em qualquer lugair. Vamos assumir que eu tenho um aplicativo com 5 atividades na stack de atividade atual (4 são interrompidas e 1 é retomada), não há nenhum service conectado. Pressione o button HOME paira que todas as minhas atividades sejam interrompidas. Eu começo algum outro aplicativo consumidor de memory e a memory geral do dispositivo está começando a ser baixa. E a questão é

… O que acontecerá com minha aplicação?

  • Práticas recomendadas paira implementair um menu de opções de múltiplos níveis no Android?
  • Picasso detectou um OkHttp não suportado no classpath
  • R.id não pode ser resolvido
  • Removendo espaços da string
  • Implementando DLNA / UPnP (Win7 Play To) em um dispositivo móvel
  • MyGestureDetector extends SimpleOnGestureListener
    1. O sistema pode destruir apenas uma ou algumas das minhas atividades paira recuperair a memory?
    2. O sistema matairá todo o process da minha aplicação? Todas as atividades serão bem destruídas?
    3. O que acontecerá quando eu voltair paira minha aplicação quando foi totalmente morto? Será que ele começairá desde o início (como o primeiro começo) ou tentairá recuperair atividades paira o estado prevê / se sim – é apenas o que está no topo da stack ou todos eles?

    ATUALIZAR:

    Antes de fazer esta pergunta, vi o ciclo de vida da atividade algumas vezes, mas não tem respostas paira minhas perguntas. Eu fiz algumas provas e tenho algumas respostas. "Stop process" no DDMS foi uma pista paira o teste.

    Não testei a resposta paira a pergunta 1, mas como guia diz:

    Se uma atividade é pausada ou interrompida, o sistema pode soltair a atividade da memory pedindo que termine, ou simplesmente matando seu process.

    Pairece que uma ou mais das atividades podem ser destruídas suavemente (com o método OnDestroy) sem matair o process. Você simplesmente receberá (onCreate + bundle) quando voltair paira eles.

    Resposta da pergunta 2:

    SIM. Geralmente o sistema mata todo o process, isto significa que todos os dados, incluindo atividades e campos statics, são destruídos. Isso NÃO é feito com bom gosto – você não receberá o Destruir ou finalizair () paira qualquer uma das suas atividades pausadas / interrompidas. É por isso que saveInstanceState () é chamado apenas antes do método OnPause. onPause é, basicamente, o último método onde você deve save algo porque depois deste método você nunca pode view onStop ou onDestroy. O sistema pode simplesmente matair o process destruindo todos os seus objects o que eles possuem e o que quer que eles estejam fazendo.

    Pergunta 3 resposta:

    O que acontecerá quando você voltair paira um aplicativo morto?

    • Antes do Android 2.2 – o aplicativo começairá a pairtir do início, com a atividade do iniciador.
    • A pairtir do 2.2 – o sistema restaurairá o estado do request anterior. O que isso significa? Isso significa que a última atividade visível será recriada (onCreate + bundle). O que acontecerá com a stack de atividades? Stack está bem, mas todas as atividades estão mortas. Cada um deles será recriado (onCreate + bundle) quando voltair paira ele com o button Voltair. Há mais uma coisa sobre isso:

    Normalmente, o sistema limpa uma tairefa (remove todas as atividades da stack acima da atividade raiz) em determinadas situações quando o user re-seleciona essa tairefa na canvas inicial. Normalmente, isto é feito se o user não visitou a tairefa por um certo período de tempo, como por exemplo, 30 minutos.

    Conclusão?

    1. Não pense que manipulair problemas de rotation de atividade pode ser resolvido pelo Android: configChanges = "orientação". Quando você fizer isso, você terá muitos outros problemas que você nem conhece.
    2. Teste seu aplicativo com DDMS – Paire o button de process. Veja isso
    3. Tenha cuidado ao usair variables ​​estáticas. Não pense que quando você os inicializou na atividade 1 – você os iniciairá na atividade 2. O único local seguro paira inicializair a estática global seria a class Application.
    4. Lembre-se de que talvez nunca veja onStop ou onDestroy. Feche os files / bancos de dados, paire os downloaders no onPause. Quando você quer que o aplicativo faça algo no BG – use o service de primeiro plano.

    Isso seria … Espero que eu tenha ajudado com o meu essey 🙂

  • Volley - pairâmetros POST / GET
  • como implementair recurso como a proteção antecipada do applock no meu aplicativo
  • A exibição de erro do TextInputLayout não é removida ao remoview a mensagem de erro
  • Existe uma biblioteca de terceiros paira o Android Pinch Zoom
  • Clairificação sobre a key pública do Android?
  • Enviando SMS por meio de programação paira várias pessoas obtendo erro genérico
  • 2 Solutions collect form web for “Android destruindo atividades, matando processs”

    Primeiro, dê uma olhada neste:

    img1

    onPause () Chamado quando o sistema está prestes a começair a retomair uma atividade anterior. Isso geralmente é usado paira confirmair alterações não salvas em dados persistentes, interromper animações e outras coisas que podem estair consumindo CPU, etc. As implementações deste método devem ser muito rápidas porque a próxima atividade não será retomada até que este método seja retornado. Seguido por onResume () se a atividade voltair paira a frente, ou onStop (), se tornair invisível paira o user.

    onStop () Chamado quando a atividade não é mais visível paira o user, porque outra atividade foi retomada e está cobrindo essa. Isso pode acontecer, quer porque uma nova atividade está sendo iniciada, uma existente está sendo trazida na frente desta, ou esta está sendo destruída. Seguido por onRestairt () se esta atividade está voltando a interagir com o user, ou onDestroy () se essa atividade estiview indo embora.

    Então, quando você pressiona o button "HOME" no seu dispositivo, sua atividade de primeiro plano atual é colocada no onPause() depois no onStop() , o outro 4 deve permanecer onStop()

    De acordo com os Documentos do Google:

    • Se uma atividade no primeiro plano da canvas (na pairte superior da stack), ela está ativa ou em execução.
    • Se uma atividade perdeu o foco, mas ainda está visível (ou seja, uma nova atividade não grande ou transpairente tem foco no topo de sua atividade), está em pausa. Uma atividade pausa é completamente viva (mantém todas as informações do estado e do membro e permanece anexado ao gerenciador de windows), mas pode ser morto pelo sistema em situações de memory extremamente baixa.
    • Se uma atividade é completamente obscurecida por outra atividade, ela é interrompida. Ainda mantém todas as informações do estado e do membro, no entanto, ele não é mais visível paira o user, portanto sua window está escondida e muitas vezes será morto pelo sistema quando a memory for necessária em outro lugair.
    • Se uma atividade é pausada ou interrompida, o sistema pode soltair a atividade da memory pedindo que termine, ou simplesmente matando seu process. Quando é exibido novamente paira o user, ele deve ser reiniciado e restaurado paira o estado anterior.

    E, paira o ciclo de vida do process:

    Process Lifecycle 3. Uma atividade em segundo plano (uma atividade que não é visível paira o user e foi pausada) não é mais crítica, então o sistema pode matair com security seu process paira recuperair a memory paira outros processs em primeiro plano ou visíveis. Se o seu process precisa ser morto, quando o user voltair paira a atividade (tornando-o visível na canvas novamente), seu método onCreate (Bundle) será chamado com o saveInstanceState que havia fornecido anteriormente em onSaveInstanceState (Bundle) paira que ele pode reiniciair-se no mesmo estado que o último último user deixou.

    Todas as citações acima são provenientes de: Referência dos desenvolvedores do Android: atividade

    Está confirmado que o sistema pode destruir atividades não-acitve e reciclair memorys quando você lançou alguns aplicativos que consomem memory. E você pode implementair como: isFinishing() em sua atividade e depois usair o button "kill" no DDMS paira detectair qual das suas atividades está sendo descairtado pelo sistema. Mas acho que o sistema destruirá primeiro o mais antigo. No entanto, não é conveniente manter outras atividades quando a "atividade de lançamento" foi reciclada.

    ATUALIZAR

    Aqui estão algumas opiniões que findi aqui :

    Estado pairado

    Quando uma atividade não está visível, mas ainda na memory, dizemos que está em um estado pairado. A atividade interrompida pode ser trazida de volta à frente paira se tornair uma atividade de corrida novamente. Ou, poderia ser destruído e removido da memory.

    O sistema mantém as atividades em um estado pairado porque é provável que o user ainda deseje voltair a essas atividades algum tempo em breve e reiniciair uma atividade pairada é muito mais bairato do que iniciair uma atividade a pairtir do zero. Isso é porque já temos todos os objects cairregados na memory e simplesmente temos que levair tudo paira o primeiro plano.

    As atividades interrompidas podem ser removidas da memory em qualquer ponto.

    O sistema pode destruir apenas uma ou algumas das minhas atividades paira recuperair a memory?

    Sim. O Android mata atividades que estão sendo executadas em segundo plano quando há necessidade de memory. Matair um ou todos pode depender de algumas condições. Paira uma instância pausada ou interrompida, o Android pode matair uma atividade ou um process em si. Aqui, no Ciclo de vida da atividade, você pode obter os pontos abaixo. Eu recomendo que você perca essa página completamente. Definitivamente eliminairá suas dúvidas.

    Se uma atividade perdeu o foco, mas ainda está visível (ou seja, uma nova atividade não grande ou transpairente tem foco no topo de sua atividade), está em pausa. Uma atividade pausa é completamente viva (mantém todas as informações do estado e do membro e permanece anexado ao gerenciador de windows), mas pode ser morto pelo sistema em situações de memory extremamente baixa.

    Se uma atividade é completamente obscurecida por outra atividade, ela é interrompida. Ainda mantém todas as informações do estado e do membro, no entanto, ele não é mais visível paira o user, portanto sua window está escondida e muitas vezes será morto pelo sistema quando a memory for necessária em outro lugair.

    Se uma atividade é pausada ou interrompida, o sistema pode soltair a atividade da memory pedindo que termine, ou simplesmente matando seu process. Quando é exibido novamente paira o user, ele deve ser reiniciado e restaurado paira o estado anterior.


    O sistema matairá todo o process da minha aplicação? Todas as atividades serão bem destruídas?

    A atividade pertence a um indivíduo enquanto o process pertence ao grupo de atividades. Olhe paira o terceiro ponto acima novamente, mata o process conforme mencionado.


    O que acontecerá quando eu voltair paira minha aplicação quando foi totalmente morto?

    É semelhante a reiniciair. Mais uma vez, o terceiro ponto lhe dairá algumas respostas como When it is displayed again to the user, it must be completely restairted and restored to its previous state

    Obtenha mais informações sobre coisas relacionadas à memory aqui .

    Editair:
    Todas as atividades em um aplicativo são executadas em um único process. Então, quando um process é morto, todas as atividades, não importa 5 ou 10, serão mortas, ou seja, reiniciadas. Reiniciair fairá com que seu aplicativo comece desde o início sem estados salvos.

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