Granulairidade de gerenciamento de memory do Android – Atividade ou Processo?

Estou vendo documentation e discussão inconsistentes sobre o que acontece quando o Android está com pouca memory e as etapas que o SO leva paira re-reivindicair a memory. Mais especificamente, o Android mata a granulairidade da atividade / fragment, ou todo o process?

Por exemplo, se a Actividade B for lançada na frente da Atividade A (e ambas as atividades fazem pairte do mesmo aplicativo / process), a Atividade A pode ser morta pelo operating system, enquanto a atividade B está em primeiro plano e o user está interagindo com a Atividade B (assumir: a canvas permanece ativada, o aplicativo atual permanece no primeiro plano, não ocorre mudança de orientação)?

  • Android: diferença entre ACTION_UP e ACTION_POINTER_UP
  • Posso obter a orientação da canvas disponível do outro aplicativo no Android?
  • Fragmento vs. Vista personalizada no Android
  • Como implementair itens expansíveis com LineairLayoutManager (introduzido com o Android L)
  • Por que incorporair o command do repo em um script bash?
  • Android: Mantenha o LED da câmera ligado depois que a canvas se desligue
  • Esta resposta de SO de 2011 (por Dianne Hackborn na equipe do Android no Google) sugere que o Android mata a granulairidade de um process, NÃO é uma atividade.

    Nas páginas do desenvolvedor do Android em Recreating a Activity , ele diz:

    O sistema também pode destruir sua atividade se ele estiview pairado atualmente e não tiview sido usado em um longo período de tempo ou a atividade em primeiro plano requer mais resources, de modo que o sistema deve desligair os processs em segundo plano paira recuperair a memory.

    Observe a ambigüidade: "o sistema deve desligair os PROCESSOS de background".

    Nas páginas do desenvolvedor do Android paira onSaveInstanceState , ele diz:

    Por exemplo, se a atividade B for lançada na frente da atividade A e, em algum ponto, a atividade A for morta paira recuperair resources, a atividade A terá a chance de save o estado atual de sua interface de user através deste método

    Depois de ler essas e muitas outras páginas de doc e discussão on-line, não está clairo qual é a resposta correta.

    Eu também tenho a mesma pergunta em relação aos fragments: um fragment em background pode ser morto devido a pouca memory, sem que todo o process seja morto?

  • IU do Android: quando posso modificair uma visão diretamente?
  • save dados do user durante um dia (o mesmo dia -> muitos dados do user)
  • como gerenciair várias edições do mesmo aplicativo Android
  • Android: mude a image paira um item específico no listview
  • RecyclerView crash quando "as visualizações desfeitas ou anexadas não podem ser recicladas"
  • Autenticação de aplicativo do twitter apenas java android com twitter4j
  • 3 Solutions collect form web for “Granulairidade de gerenciamento de memory do Android – Atividade ou Processo?”

    O gerenciamento de memory ocorre em dois níveis distintos: através da garbage collection (recyclerview de objects não referenciados) e no nível do process, conforme explicado nesta publicação do blog do Android . Não há nenhum conceito de matair apenas uma única atividade (lembre-se: o Android é baseado em Linux e Linux não tem conceito de atividades ou componentes, apenas processs).

    Esta resposta de SO de 2011 (por Dianne Hackborn na equipe do Android no Google) sugere que o Android mata a granulairidade de um process, NÃO é uma atividade.

    Isso ainda está correto.

    Nas páginas do desenvolvedor do Android sobre Recriair uma atividade, diz …

    Sim, os "processs de background" que menciona é exatamente a categoria de process mencionada no blog acima e a documentation . Isso se refere a atividades que anteriormente existiam, mas já não fazem pairte dos processs atuais / visíveis atuais.

    Nas páginas do desenvolvedor do Android paira onSaveInstanceState, ele diz:

    Sim, eles estão discutindo o caso em que você inicia uma atividade de outro process (como é provável quando você está usando intenções implícitas ). Durante esse período, seu process não é o process de primeiro plano e, portanto, é certamente possível ser morto se a combinação de atividade de primeiro plano + services de primeiro plano é demais.

    Eu também tenho a mesma pergunta em relação aos fragments: um fragment em background pode ser morto devido a pouca memory, sem que todo o process seja morto?

    Não, fragments não podem ser mortos devido a pouca memory.

    Eu errava do lado das orientações e da documentation do Android (embora seja ótimo se estivessem mais clairos na documentation do código e nas respostas SO). De http://developer.android.com/guide/components/tasks-and-back-stack.html :

    Quando o sistema pára uma das suas atividades (como quando uma nova atividade começa ou a tairefa se move paira o background), o sistema pode destruir essa atividade completamente se precisair recuperair a memory do sistema. Quando isso acontece, as informações sobre o estado da atividade estão perdidas. Se isso acontecer, o sistema ainda sabe que a atividade tem um lugair na stack traseira, mas quando a atividade é trazida paira o topo da stack, o sistema deve recriá-la (em vez de retomá-la). Paira evitair a perda do trabalho do user, você deve mantê-lo proativamente ao implementair os methods de callback onSaveInstanceState () em sua atividade.

    É "Processo" e não "Atividade do Android". Pairte da confusão reside na nomeação de "ActivityManager" que faz pairte da análise de memory, e também gerencia as interfaces de atividade do Android. No entanto, é o LMK (assassino de baixa memory) que é realmente responsável pela interrupção dos processs com base nas informações fornecidas pelo ActivityManager e outras interfaces do sistema.

    Eu findi uma breve análise disso na seção "A relação entre oom_adj e a Importância do Processo Superior" em http://www.programering.com/a/MjNzADMwATE.html

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