In breve, i Task Killers automatici funzionano eseguendo il polling del sistema operativo per un elenco dei processi attualmente in esecuzione e della memoria che stanno consumando. Quindi, con un algoritmo intelligente o con l'input dell'utente, i Task Killers inviano una chiamata al sistema che dice al sistema di uccidere il processo. Ci sono due apis che puoi fare.
Sono
Process.killProcess(int pid)
ActivityManager.killBackgroundProcesses(String packageName)
Questo primo opere invocando Process.killProcess(int pid)
dove pid
è l'identificatore univoco per un processo specifico. Android uccide i processi allo stesso modo di Linux; tuttavia, un utente può solo uccidere i processi che possiedono. In Android ogni app viene eseguita con un UID univoco (UserID). Le app che utilizzano questa API un'App possono solo uccidere i propri processi, quindi il seguente explanation in the docs for Process.killProcess(int pid)
:
Uccidere il processo con il PID specificato. Si noti che, sebbene questa API consenta a di richiedere l'interruzione di qualsiasi processo basato sul relativo PID, il kernel applicherà restrizioni standard su quali PID effettivamente è possibile annullare . In genere ciò significa solo il processo che esegue i pacchetti/applicazioni del chiamante e tutti i processi aggiuntivi creati da tale app; I pacchetti che condividono un UID comune saranno anche in grado di uccidere i rispettivi processi .
Quando viene chiamato questo metodo, il signal viene generato dal sistema operativo e inviato al processo. Ogni volta che un processo riceve un segnale dal sistema operativo, deve gestirlo o morire immediatamente. Segnali come SIG_KILL
non possono essere gestiti e comportano la morte immediata del processo destinatario. Se vuoi eliminare i processi che non hai i privilegi da eliminare, ovvero non il tuo processo, devi cambiare utente o inoltrare i tuoi privilegi (su Android questo richiede i privilegi di root sul dispositivo).
La seconda API funziona dicendo all'unità ActivityManager
incorporata che si desidera eliminare i processi associati a un pacchetto specifico. Questa API risolve la necessità che l'UID corrisponda all'UID del processo perché richiede che l'utente accetti l'autorizzazione KILL_BACKGROUND_PROCESSES
. Questa autorizzazione segnala al sistema operativo che un'app è stata approvata dall'utente come task killer . Quando un task killer vuole uccidere un'app, dice al sistema operativo di uccidere il processo consentendo a un'app di aggirare il problema di essere solo in grado di uccidere i processi di sua proprietà.
Nel Android Docs it says that this API actually uses the first Process.killProcess
API
avere il sistema di uccidere immediatamente tutti i processi in background associati con il pacchetto data. È lo stesso del kernel che uccide quei processi per recuperare la memoria; il sistema si prenderà cura di riavviare questi processi in futuro, se necessario.
Se volete saperne di più vi consiglio di leggere la Posix Signals e The Linux kill command
dovrebbe essere sulla http://android.stackexchange.com/ –
Beh penso che sia una domanda reale che appartiene a SO: Vuole sapere perché e come è programmaticamente possibile uccidere i processi su Android. Questa è una questione di programmazione ai miei occhi e una domanda molto interessante. – theomega
per android/multitasking: http://android-developers.blogspot.com/2010/04/multitasking-android-way.html –