Che cosa significa il pulsante "Force stop"?


26

Quando vado a Settings > Applications > Manage Applications > Downloadedvedere un elenco di applicazioni. Se seleziono alcune applicazioni vedo il pulsante "Force stop" attivo, ma alcune applicazioni hanno questo pulsante disattivato.

Cosa significa? Cosa succede se premo questo pulsante?

Questo pulsante non può significare che l'applicazione è in esecuzione, poiché le applicazioni con questo pulsante non sono elencate nella Runningsezione.

Posso elencare solo le applicazioni che hanno il Force stoppulsante attivo e disinstallarle?


Versione Android: 3.2

Risposte:


18

Come detto nel mio commento alla risposta di Paco, le informazioni che ha fornito sono per lo più corrette: la maggior parte delle app non si chiude completamente se le lasci e nessuna app dovrebbe uscire se le lasci tramite il pulsante "Home". Inoltre, alcune app hanno in esecuzione servizi in background che altrimenti l'utente non può chiudere.

Ora ci sono alcune situazioni in cui è necessario arrestare un'app (compresi i suoi servizi in background), ad esempio se si desidera disinstallare quell'app (o, nel caso di un'app di sistema, i suoi aggiornamenti). Lo noterai quando il pulsante "Force Stop" è attivo, il pulsante "Uninstall" (o "Remove") è disattivato, ma quest'ultimo si attiva quando hai fermato l'app tramite "Force Stop". (Se entrambi i pulsanti sono disattivati, puoi dire che è un'app di sistema, che non puoi disinstallare).

Btw: Se il pulsante "Force Stop" è disattivato ("oscurato" quando lo metti) significa che l'app non è attualmente in esecuzione, né ha alcun servizio in esecuzione (in quel momento).


1
You will notice this when the "Force Stop" button is active, the "Uninstall" (or "Remove") button is grayed out, puoi fornire un'app di esempio con questo comportamento? Ho appena sfogliato alcune delle mie app e ho scoperto che sono attivati ​​i pulsanti "Force Stop" e "Uninstall". Sono su Android 4.4.2.
cychoi,

1
Poiché la mia risposta ha già 2 anni, Kitkat non era disponibile allora; questo comportamento potrebbe essere cambiato o non influire su tutte le app. Non riesco a testare con Kitkat (nessun dispositivo che esegue quello), e fuori di testa non ricordo con quali pacchetti ho visto questo, mi dispiace.
Izzy

15

Il codice dietro il pulsante di arresto forzato è complesso e non documentato. Lo riprodurrò alla lettera e poi lo esaminerò un pezzo alla volta.

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);
    }
}

La prima ifriga verifica se qualche componente del pacchetto è un amministratore del dispositivo (ovvero, se è selezionato nell'elenco Amministratori dispositivo nella pagina Sicurezza dell'app Impostazioni ). In tal caso, il pulsante è disabilitato ( disattivato ) quindi non è possibile interrompere gli amministratori del dispositivo.

Quindi, else ifcontrolla se il pacchetto è già stato arrestato . Qui, fermato non significa semplicemente "non correre". Per quanto ne so, un pacchetto è nello stato di arresto se non hai mai eseguito alcun componente da esso (ad esempio avviandolo dal menu) o se hai premuto un pulsante di arresto forzato (questo o in una finestra di dialogo "smesso di funzionare") e non eseguire nuovamente nessuno dei suoi componenti. Se il pacchetto non è stato arrestato, il pulsante è abilitato .

Il elsecaso riguarda la rara eventualità che un'app sia stata arrestata e non sia un amministratore del dispositivo. In questo caso, dà altro servizi di sistema la possibilità di abilitare il pulsante. Ad esempio, l'app potrebbe avere un allarme impostato e in sospeso, che in seguito causerebbe il riavvio dell'app anche dallo stato di arresto. In questo caso, il pulsante sarà abilitato. Se nessun altro servizio di sistema ha un motivo per abilitare il pulsante, verrà disabilitato.

Sommario

Il pulsante Force stop è abilitato se il pacchetto non è un amministratore del dispositivo e o non hai già forzato l'arresto di questa app o l'hai forzata, ma un servizio di sistema pensa che verrà eseguita di nuovo.

Se l'app è in esecuzione (e non è un amministratore del dispositivo), il pulsante di arresto forzato sarà sicuramente abilitato, ma il pulsante che viene abilitato non significa che l'app è in esecuzione.


È fantastico che ci mostri il codice che determina se il pulsante viene visualizzato o meno. Per uno sviluppatore come me questa è la risposta perfetta. Ma davvero, questa è solo metà della risposta. Non mostri cosa succede quando premi il pulsante.
John Pankowicz,

2

Android mantiene 4 tipi di applicazioni nella sua memoria. Non ricordo tutto, ma lo sfondo in esecuzione e in cache sono 2 di questi ... (è possibile accedere allo sfondo memorizzato facendo clic sul pulsante del menu hardware nella scheda in esecuzione e selezionando l'opzione pop-up)

Quindi, anche se potrebbe non essere visibile nei processi in esecuzione , non è del tutto morto.

Principalmente deve essere sullo sfondo memorizzato nella cache processi di .

Inoltre, per quanto riguarda i task manager ... Non si consiglia di usarli poiché Android è stato hardcoded per gestire le app in modo efficiente. Gli assassini App / Task in realtà consumano la batteria come dopo che il killer uccide le app, secondo l'algoritmo che segue Android, verranno avviati di nuovo! (e le app occupano piuttosto più memoria all'avvio che nello stato ideale), quindi diventa un ciclo e scarica la batteria.

quindi il pulsante di chiusura forzata è attivo per lo più su processi in esecuzione e memorizzati nella cache e può esistere su pochissime app che risiedono negli altri due tipi di processi!

su altre app non c'è niente da fare!


1
Sono più di 4 tipi (vedi Informazioni sui cicli di vita delle applicazioni e delle attività Android per una spiegazione più dettagliata). Ma quelle classi non hanno nulla a che fare con il pulsante "force stop", almeno non direttamente (vedi la mia risposta : un pulsante "force stop" attivo significa semplicemente che l'app stessa o uno dei suoi servizi registrati è attualmente in esecuzione).
Izzy

-2

Questo pulsante è attivo per le app in esecuzione o in esecuzione dall'ultima volta che hai avviato il dispositivo.

Android non uccide totalmente le app quando esci da esso, questo pulsante serve per chiudere completamente l'app e rimuoverla dallo stack (app in esecuzione), inoltre questo pulsante libera la memoria utilizzata dall'app.

Non è possibile elencare le app in esecuzione, anche le app in esecuzione in background hanno questo pulsante.

Esistono app killer gratuite nel Play Store, per gestire automaticamente la memoria del tuo dispositivo.


3
Mentre le informazioni di base sono corrette: rimuovere meglio la parte relativa agli "assassini automatici". Potrebbe esserci stato un po 'di tempo in cui erano necessari (prima di Android 2.x), ma sono assolutamente controproducenti e per lo più hanno un effetto negativo sull'autonomia della batteria.
Izzy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.