Como devo evitar que um aplicativo seja morto sem usar ferramentas de terceiros? -- 9.0-pie campo com ram campo com task-management camp android Relacionado O problema

How shall I prevent an app from being killed without using third party tools?


1
vote

problema

português

Ao contrário do mundo de computação tradicional, onde os programas não vão desistir sem o usuário pedindo, no mundo móvel (e no Android em particular), é geralmente considerado até o sistema decidir qual aplicativo desistir e quando, para o ponto em que muitos se a maioria dos aplicativos não tiverem uma opção de desistir.

Até certo ponto, é justificado devido a:

    .
  1. a quantidade limitada de RAM disponível (contrária ao mundo do PC / Mac onde fomos longe demais na outra direção, e o sistema por Padrão considera que um programa pode pedir a memória virtual que quer, que é um problema de segurança, mas isso é outro assunto)
  2. os dispositivos sendo para o público em geral, em um contexto onde as pessoas Não necessariamente tenha o conhecimento / vontade / hora de gerenciar seu telefone Uso em um aplicativo por App Base
  3. Os aplicativos são geralmente projetados para serem usados ​​por curtos períodos de tempo (que está ligado ao ponto anterior de alguma forma)

No entanto, há casos em que não se deseja que um determinado aplicativo saia a menos que seja solicitado a explicitamente pelo usuário final. A realidade daquela necessidade parece ter sido levada em conta por alguns fabricantes de telefones celulares (se não estiver enganado, a Samsung tem fornecido uma opção por algum tempo agora).

Então, minha pergunta é: Como devo dizer ao sistema para não matar um determinado aplicativo? Eu sei que há aplicativos que fingem conseguir isso, mas como devo fazer isso sozinho, sem recorrer a ferramentas de terceiros, apenas as ferramentas de linha de comando Android e APIs?

afaik, parece haver três critérios para decidir matar um aplicativo:

    .
  1. Uso de memória (o daemon lmk sendo responsável, a menos que seja específico Driver está presente, no meu caso, eu tenho lmkd correndo)
  2. um limite no número de processos em execução
  3. otimização da bateria, mas já existe uma opção para desativar por aplicativo, então eu não considero um problema

Então, basicamente, apenas pontos 1 e 2 permanecem a ser resolvidos. Vocês são bem-vindos!

Para o que vale, eu corro Android X86 9.0 em um emulador (QEMU).

edit: eu verifiquei o código de um programa que é chamado Configurações do aplicativo , que faz parte do Xposed Framework. O programa finge ser capaz de definir um programa para permanecer residente na memória. Depois de verificar o código, parece que modifica alguns atributos de processo de aplicativo que são definidos no ABCDEFGHIJKLMNABCDEFGHIJKLMN0 Class, nomeadamente ABCDEFGHIJKLMNABCDEFGHIJKLMN1 , curRawAdj , setRawAdj , curAdj e setAdj , definindo aqueles que o valor de -12 .

Eu não consegui testar o programa desde o meu x86_64 Android 9.0 não parece compatível com a estrutura, mas eu encontrei Esta página , explicando com mais detalhes como o serviço do Gerenciador de atividades atualiza os valores OM de acordo com o status do aplicativo e se comunica com o LMK. Explica o que os valores Oom podem ser e o que eles significam. Tão claramente, tentando alterar os valores OOM em ABCDefGHIJKLMNABCDEFGHIJKLMN7 é inútil, pois o Gerenciador de Atividades os alterará, e provavelmente o LMK nem sequer lê-los, e leva apenas o que o gerente de atividade transmite. < / p >.

Existe alguma maneira de sugerir o gerente de atividades para dar valores escolhidos para um aplicativo? Eu poderia, por exemplo, definir o valor para NATIVE_ADJ ou até não mais do que FOREGROUND_APP_ADJ em todos os momentos. Ou talvez passando esses parâmetros através de uma intenção especialmente criada?

Reedit: para os interessados, o comando maxAdj0 deve parar o daemon lmk até a próxima reinicialização pelo menos, que deixa apenas o assassino Oom do Linux no comando. Eu não testei isso, então não posso dizer com certeza, mas isso deve fazer isso por algumas pessoas. Cuidado com as conseqüências, no entanto, se você continuar usando muitos aplicativos ao mesmo tempo, como um sucesso de desempenho pode ser esperado.

english

Contrary to the traditional computing world, where programs won't quit without the user asking for it, in the mobile world (and Android in particular), it's generally considered up to the system to decide which app to quit and when, to the point where many if not most apps don't even have a quit option.

Up to some extent, it's justified due to :

  1. The limited amount of RAM available (contrary to the PC/Mac world where we've gone too far in the other direction, and the system by default considers a program can ask for as much virtual memory as it wants, which is a security problem, but that's another subject)
  2. The devices being for the general public, in a context where people don't necessarily have the knowledge/will/time to manage their phone usage on an app by app basis
  3. The apps are often designed to be used for short periods of time (which is linked to the previous point somehow)

However, there are cases where one doesn't want a given app to quit unless it's asked to explicitly by the end user. The reality of that need seems to have been taken into account by some mobile phone manufacturers (if I'm not mistaken, Samsung has been providing such an option for some time now).

So my question is : how shall I tell the system to not kill a given app ? I know there are apps that pretend to achieve this, but how shall I do that myself, without resorting to third party tools, only the stock Android command line tools and APIs ?

Afaik, there seem to be three criteria to decide to kill an app :

  1. Memory usage (the LMK daemon being in charge, unless a specific driver is present, in my case I have lmkd running)
  2. A limit on the number of running processes
  3. Battery optimisation, but there's already an option to disable that per-app, so I don't consider it a problem

So basically, only points 1 and 2 remain to be solved. You advices are welcome !

For what it's worth, I run Android x86 9.0 on an emulator (qemu).

EDITxc2xa0: I checked the code of a program that's called App Settings, that's part of the Xposed framework. The program pretends to be able to set a program to stay resident in memory. After checking the code, it seems it modifies some application process attributes that are defined in the ProcessRecord class, namely maxAdj, curRawAdj, setRawAdj, curAdj and setAdj, setting those to the value of -12.

I wasn't able to test the program since my x86_64 Android 9.0 doesn't seem compatible with the framework, but I found this page, explaining in more detail how the activity manager service updates OOM values according to the app status, and communicates with LMK. It explains what the OOM values can be and what they mean. So clearly, trying to change the OOM values in /proc is useless, as the activity manager will change them, and probably LMK doesn't even read them anyway, and only takes what the activity manager transmits.

Is there any way to hint the Activity Manager into giving chosen OOM values to an appxc2xa0? I could for example set the value to NATIVE_ADJ, or even no more than FOREGROUND_APP_ADJ at all times. Or maybe passing those parameters through a specially crafted intentxc2xa0?

REEDITxc2xa0: for those interested, the stop lmkd command should stop the LMK daemon until next reboot at least, which leaves only the OOM killer from Linux in charge. I didn't test it so I can't say for sure, but that should do it for some people. Beware of the consequences, however, if you continue using many apps at the same time, as a performance hit can be expected.

        
         
         

Lista de respostas


Perguntas relacionadas

9  Como fechar (desligar / matar) o navegador da Web do Android?  ( How to close shutdown kill the android web browser ) 
Eu li esta pergunta Qual é a maneira certa para fechar aplicativos no Android ? Mas quero saber como fechar - isso significa fechar - aplicativo para salv...

6  Os assassinos de tarefas realmente funcionam? [duplicado]  ( Do task killers actually work ) 
. Esta pergunta já tem respostas aqui : fechado 8 anos atrás . . Duplicado possível: Eu realm...

2  Então, que tipo de processo é o teclado Android?  ( So what type of process is android keyboard ) 
Eu recentemente instalei o CyanogenMod 11 no meu (agora muito antigo) LG Optimus 2x. Depois de alguns ajustes, consegui que funcione muito mais snapier do que...

13  Como faço para identificar aplicativos ou configurações que causam problemas de desempenho?  ( How do i identify apps or settings that cause performance problems ) 
Se estiver tendo problemas de desempenho, quais ferramentas posso usar para identificar onde minhas lags de desempenho estão vindo? Eu usei um Gerenciador de...

5  Você pode modificar ou aumentar o tamanho da lista de aplicativos recentes?  ( Can you modify or increase the size of the recent apps list ) 
Eu tendem a confiar na lista recente de aplicativos para saltar entre os aplicativos que uso mais frequentemente, como uma espécie de história de um dia, por ...

0  Existe um atalho para o TaskManager na tatuagem HTC  ( Is there a shortcut to the taskmanager on htc tattoo ) 
Eu nunca posso terminar uma tarefa facilmente na tatuagem HTC - há um atalho para ele que eu possa fazer, ou um aplicativo mais fácil de usar? ...

95  Eu realmente preciso instalar um gerenciador de tarefas?  ( Do i really need to install a task manager ) 
Alguém realmente precisa instalar um gerenciador de tarefas? Meu telefone faz desaceleração em ocasiões raras, mas não é algo que dificulta o uso regular. ...

1  O WhatsApp MessemService é sempre morto logo depois de sair do aplicativo  ( Whatsapp messageservice is always killed shortly after exiting the app ) 
Um par de dias atrás eu notei que não recebi mais mensagens do WhatsApp até que eu inicio manualmente o aplicativo, que é quando as mensagens pendentes são en...

7  É aconselhável executar um aplicativo Killer de tarefas no Android [duplicate]  ( Is it advisable to run a task killer app on android ) 
. Esta pergunta já tem respostas aqui : fechado 9 anos atrás . . Duplicado possível: Eu realm...

-1  Consumo de bateria  ( Battery consumption ) 
Minhas estatísticas são o Follwing: ABCDEFGHIJKLMNABCDEFGHIJKLMN0 , ABCDEFGHIJKLMNABCDEFGHIJKLMN1 , ABCDEFGHIJKLMNABCDEFGHIJKLMN2 , Voice call 3% . Eu t...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.