O que significa o botão "Forçar parada"?

26

Quando vou Settings > Applications > Manage Applications > Downloaded, vejo uma lista de aplicativos. Se eu selecionar alguns aplicativos, vejo o botão "Forçar parada" ativo, mas alguns aplicativos têm esse botão esmaecido.

O que isso significa? O que acontece se eu pressionar este botão?

Este botão não pode significar a execução de aplicativos, pois os aplicativos com esse botão não estão listados na Runningseção.

Posso listar apenas aplicativos com o Force stopbotão ativo e desinstalá-los?


Versão do Android: 3.2

Suzan Cioc
fonte

Respostas:

18

Como foi dito no meu comentário à resposta do paco, as informações que ele forneceu estão corretas: a maioria dos aplicativos não sai completamente se você os deixar e nenhum aplicativo deve sair se você sair pelo botão "Início". Além disso, alguns aplicativos têm serviços em segundo plano em execução que, de outra forma, o usuário não pode sair.

Agora, existem algumas situações em que você precisa que um aplicativo (incluindo seus serviços em segundo plano) seja interrompido - por exemplo, se você deseja desinstalar esse aplicativo (ou, no caso de um aplicativo de sistema, suas atualizações). Você notará isso quando o botão "Forçar parada" estiver ativo, o botão "Desinstalar" (ou "Remover") estiver acinzentado - mas o último será ativado quando você interromper o aplicativo por meio de "Forçar parada". (Se os dois botões estiverem acinzentados, você pode dizer que é um aplicativo do sistema - que você não pode desinstalar).

Btw: se o botão "Forçar parada" estiver acinzentado ("esmaecido" como você diz), significa que o aplicativo não está sendo executado no momento, nem possui nenhum serviço em execução (naquele momento).

Izzy
fonte
11
You will notice this when the "Force Stop" button is active, the "Uninstall" (or "Remove") button is grayed out, você pode dar um exemplo de aplicativo que está tendo esse comportamento? Acabei de ler alguns dos meus aplicativos e descobri que os botões "Force Stop" e "Uninstall" estão ativados. Estou no Android 4.4.2.
cychoi
11
Como minha resposta já tem 2 anos, Kitkat não estava disponível na época; esse comportamento pode ter sido alterado ou não afetar todos os aplicativos. Não consigo testar com Kitkat (nenhum dispositivo está executando isso) e, fora da minha cabeça, não me lembro com quais pacotes vi isso, desculpe.
Izzy
15

O código por trás do botão Parar força é complexo e não documentado. Vou reproduzi-lo literalmente e depois analisá-lo um pedaço de cada vez.

private void checkForceStop() {
    if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
        // User can't force stop device admin.
        updateForceStopButton(false);
    } else if ((mAppEntry.info.flags&ApplicationInfo.FLAG_STOPPED) == 0) {
        // If the app isn't explicitly stopped, then always show the
        // force stop button.
        updateForceStopButton(true);
    } else {
        Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
                Uri.fromParts("package", mAppEntry.info.packageName, null));
        intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName });
        intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid);
        intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppEntry.info.uid));
        getActivity().sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null,
                Activity.RESULT_CANCELED, null, null);
    }
}

A primeira iflinha verifica se algum componente do pacote é um administrador de dispositivos (ou seja, se ele foi verificado na lista Administradores de dispositivos na página Segurança do aplicativo Configurações ). Nesse caso, o botão está desativado (acinzentado) para que você não possa parar os administradores do dispositivo.

Em seguida, else ifverifica se o pacote já está parado . Aqui, parado não significa apenas "não rodar". Pelo que sei, um pacote está no estado parado se você nunca executou nenhum componente (como iniciá-lo no menu) ou se pressionou um botão Forçar parada (este ou em uma caixa de diálogo "parou de funcionar") e não execute nenhum de seus componentes novamente. Se o pacote não foi parado, o botão está ativado .

O elsecaso cobre a rara eventualidade de um aplicativo ter sido parado e não ser um administrador de dispositivos. Nesse caso, ele oferece a outros serviços do sistema a chance de ativar o botão. Por exemplo, o aplicativo pode ter um alarme definido e pendente, o que mais tarde faria com que o aplicativo fosse reiniciado mesmo no estado parado. Nesse caso, o botão será ativado. Se nenhum outro serviço do sistema tiver um motivo para ativar o botão, ele será desativado.

Sumário

O botão Forçar parada é ativado se o pacote não for um administrador de dispositivos e você ainda não interrompeu o aplicativo forçadamente ou o interrompeu à força, mas um serviço do sistema acha que o executará novamente.

Se o aplicativo estiver em execução (e não for um administrador do dispositivo), o botão Forçar parada definitivamente estará ativado, mas o botão ativado não significa que o aplicativo está em execução.

Dan Hulme
fonte
É ótimo que você nos mostre o código que determina se o botão é exibido ou não. Para um desenvolvedor como eu, essa é a resposta perfeita. Mas, na verdade, essa é apenas metade da resposta. Você não mostra o que acontece quando realmente pressiona o botão.
John Pankowicz 25/02
2

O Android mantém 4 tipos de aplicativos em sua memória. Não me lembro de tudo, exceto o fundo em cache e em execução são dois deles ... (o fundo em cache pode ser acessado clicando no botão do menu de hardware quando estiver na guia em execução e selecionando a opção exibida )

Portanto, embora possa não ser visto nos processos em execução , não está totalmente morto.

Principalmente, deve estar nos prcessos em segundo plano em cache .

Além disso, sobre os gerenciadores de tarefas. Não é aconselhável usá-los, pois o Android foi codificado para gerenciar aplicativos de forma eficiente. de novo! (e os aplicativos ocupam muito mais memória na inicialização do que no estado ideal), portanto, torna-se um ciclo e gasta a bateria.

portanto, o botão forçar fechamento está ativo na maioria dos processos em execução e em cache e pode existir em muito poucos aplicativos que residem nos outros dois tipos de processos!

em outros aplicativos, está acinzentado!

Nirmik
fonte
11
São mais de quatro tipos (consulte Compreendendo os ciclos de vida de aplicativos e atividades do Android para obter uma explicação mais detalhada). Mas essas classes não têm nada a ver com o botão "forçar parada", pelo menos não diretamente (veja minha resposta : um botão ativo "forçar parada" significa simplesmente que o aplicativo em si ou um de seus serviços registrados estão em execução).
Izzy
-2

Este botão está ativo para aplicativos em execução ou em execução desde a última vez em que você iniciou o dispositivo.

O Android não mata totalmente os aplicativos quando você sai dele; esse botão é para fechar completamente o aplicativo e removê-lo da pilha (aplicativos em execução); também esse botão libera a memória usada pelo aplicativo.

Não há como listar os aplicativos em execução, também os aplicativos em segundo plano têm esse botão.

Existem aplicativos matadores gratuitos na Play Store, para gerenciar a memória do seu dispositivo automaticamente.

pacoespinoza
fonte
3
Enquanto as informações básicas estiverem corretas: remova melhor a parte dos "assassinos automáticos". Pode ter havido algum tempo em que eles eram necessários (antes do Android 2.x), mas eles são absolutamente contraproducentes e, principalmente, têm um efeito negativo no tempo de execução da bateria.
Izzy