2012-01-09 12 views
6

Stavo sperimentando con ActivityManager.killBackgroundProcesses nella mia applicazione e ho notato qualcosa di interessante. Spero che qualcuno su StackOverflow possa far luce su questo.ActivityManager.killBackgroundProcesses diverso da "Force stop"

Quindi, se avvio un'applicazione, ad esempio, su YouTube, prima visualizzo l'elenco della pagina video, quindi faccio clic su menu-> Impostazioni, visualizzerò la pagina delle impostazioni. ora se clicco sul pulsante Home, che metterà YouTube sullo sfondo. Fin qui tutto bene. Ora se eseguo ActivityManager.killBackgroundProcesses per uccidere l'applicazione youtube (o io uso Advanced Task Killer che credo utilizzi la stessa API), e quando lancio di nuovo YouTube, vedo la pagina delle impostazioni, non l'elenco predefinito della pagina video.

Ma se invece di fare ActivityManager.killBackgroundProcesses, vado alle impostazioni di sistema-> gestisci applicazione-> Youtube-> Force stop, e quando lancio di nuovo youtube, ottengo l'elenco della pagina video, non la pagina delle impostazioni.

Quindi sembra che ActivityManager.killBackgroundProcesses sia diverso da force stop in quanto ricorda ancora l'ultima attività/pagina in cui si trovava prima che fosse messo in background, mentre force stop ti dà un nuovo inizio.

Qualcuno ha una buona spiegazione per questo? Nel mio codice è possibile fare "force stop" per ottenere un nuovo inizio dell'applicazione?

Grazie mille!

+0

Giusto per chiarire, l'app che sto cercando di uccidere/riavviare sono app di terze parti, come gmail, youtube, ecc. Che non posso modificare il loro codice. – Safecoder

+0

Trovato da un vecchio post su Google. http://groups.google.com/group/android-developers/browse_thread/thread/d8fc993c54fe76e1 Quindi sembra che "Force stop" sia stato implementato con restartPackage, ma in 2.2, restartpackage è stato sostanzialmente rimosso e diventa sostanzialmente lo stesso di killbackgroundprocess . Sto indovinando che 2.2 e versioni successive devono utilizzare una nuova API per terminare il processo, ma non è documentato ... – Safecoder

risposta

1

Beh, io non sono sicuro di come usarlo esattamente come non ho mai provare prima con le applicazioni di altri della mia, ma Mayby sarebbe utile - pensare di utilizzare: android.os.Process.killProcess(android.os.Process.myPid());

E sulla tua domanda perché il sistema può fermare e non puoi La verità è che il sistema può più. Più specifico, quando premi il pulsante di arresto della forza, il sistema invia il segnale di uccisione (segnale 9) per elaborare con il dato pid.

Questo è il motivo per cui penso che la funzione sopra dovrebbe essere d'aiuto, perché invia quasi, se non esattamente questo, segnale.

Spero che possa essere d'aiuto.

+0

Grazie per il suggerimento. Ma non aiuta il mio caso. killProcess non ucciderà le applicazioni che non possiedo, ad esempio, gmail, youtube, ecc. L'ho provato e non ha alcun effetto su quelle app. – Safecoder

0

Registrazione al sistema di sicurezza del sistema operativo Android la tua app non può semplicemente uccidere un'altra attività. È possibile inviare una richiesta al sistema e quindi farà tutto il materiale necessario per te, se possibile.

Le impostazioni sono l'applicazione di sistema, ecco perché ha più accesso della tua app.

Quindi, sembra che il sistema operativo non ti consenta di uccidere le app. Non sono sicuro, ma prova a controllare i permision di app - forse la soluzione è lì.

+0

Sì e no. killBackgroundProcesses ti permette di chiudere il processo, ma sembra che non sia una chiusura "dura" come chiusura forzata. Conserva ancora alcuni stati della corsa precedente come ricordare dove era stata interrotta l'ultima volta. – Safecoder

+0

L'applicazione rimane in "settings-> manage application" dopo .killBackgroundProcesses? –