Cosa succede a un programma in esecuzione quando si preme il tasto "home" nel telefono Android?


27

Una cosa mi confonde. Sembra che se uso un programma su Android e premo il pulsante "home", vedo la schermata principale e riesco a rieseguire il programma e vedere quel programma nello stesso stato di prima - quindi sembra che il programma non sia stato riavviato completamente, appena sospeso e poi ripreso.

Eppure ciò non sembra accadere in modo coerente con il gioco Air Control. A volte quando gioco a Air Control e premo "home" e successivamente rieseguo Air Control - viene messo in pausa (come se avessi premuto il pulsante "pause") e posso riprendere il gioco. A volte lo stesso porta Air Control ad abbandonare il gioco e ricominciare da capo.

Quindi sembra che non capisca qualcosa.

Qual è il problema qui? Cosa succede a un programma quando si preme "home"? Continua a funzionare o cosa fa?


Dubito che premendo il pulsante Home si traduca in un maggiore consumo di energia.
Flusso

Risposte:


12

Premendo si Homepassa dall'app alla schermata principale, lasciando l'app in esecuzione in background. È un po 'come passare da Windows a PC Windows.

Ad eccezione del fatto che quando il telefono sta esaurendo le risorse come la memoria, inizierà a chiudere le app in esecuzione in background, in modo che il telefono disponga di risorse sufficienti per quello che stai cercando di fare ora. I giochi sono spesso tra le prime app che il telefono "ucciderà" per risparmiare risorse in quanto spesso usano molta più memoria e CPU rispetto ad altre app. Ecco perché a volte il tuo gioco è ancora in pausa e a volte Android lo ha chiuso per te.

Il Backpulsante consente di chiudere le app in modo che siano effettivamente chiuse.

Vedi anche Qual è il modo giusto per chiudere le app in Android?


26

Il documento di sviluppo Android Tasks and Back Stack in realtà lo copre abbastanza bene. Un estratto rilevante:

Un'attività è un'unità coesiva che può passare allo "sfondo" quando gli utenti iniziano una nuova attività o accedono alla schermata Home, tramite il tasto HOME. Mentre in background, tutte le attività dell'attività vengono interrotte, ma il back stack per l'attività rimane intatto: l'attività ha semplicemente perso lo stato attivo mentre si svolge un'altra attività, come mostrato nella Figura 2. Un'attività può quindi tornare alla " primo piano "in modo che gli utenti possano riprendere da dove erano stati interrotti. Supponiamo, ad esempio, che l'attività corrente (Attività A) abbia tre attività nel suo stack, due sotto l'attività corrente. L'utente preme il tasto HOME, quindi avvia una nuova applicazione dal programma di avvio dell'applicazione. Quando viene visualizzata la schermata principale, l'attività A passa in secondo piano. All'avvio della nuova applicazione, il sistema avvia un'attività per quell'applicazione (Attività B) con il proprio stack di attività. Dopo aver interagito con quell'applicazione, l'utente ritorna di nuovo a casa e seleziona l'applicazione che inizialmente ha avviato l'attività A. Ora, l'attività A viene in primo piano: tutte e tre le attività nel suo stack sono intatte e riprende l'attività nella parte superiore dello stack. A questo punto, l'utente può anche tornare all'attività B andando su Home e selezionando l'icona dell'applicazione che ha avviato tale attività (o toccando e tenendo premuto il tasto HOME per rivelare le attività recenti e selezionarne una). Questo è un esempio di multitasking su Android. l'utente può anche tornare all'attività B andando su Home e selezionando l'icona dell'applicazione che ha avviato tale attività (o toccando e tenendo premuto il tasto HOME per rivelare le attività recenti e selezionarne una). Questo è un esempio di multitasking su Android. l'utente può anche tornare all'attività B andando su Home e selezionando l'icona dell'applicazione che ha avviato tale attività (o toccando e tenendo premuto il tasto HOME per rivelare le attività recenti e selezionarne una). Questo è un esempio di multitasking su Android.

Nota: è possibile svolgere più attività contemporaneamente in background. Tuttavia, se l'utente sta eseguendo molte attività in background contemporaneamente, il sistema potrebbe iniziare a distruggere le attività in background al fine di recuperare memoria, causando la perdita degli stati di attività. Vedere la sezione seguente sullo stato dell'attività.

Riepilogo : l'attività viene spostata in background quando si preme Homee si trova in memoria, non facendo davvero nulla e mantenendo il suo stato. Ciò significa che (in generale) è possibile tornare all'attività e riprenderà da dove era stata interrotta. Tuttavia, il sistema Android può - e eliminerà - le attività in background se deve recuperare la memoria. Quando e se ciò accade dipende interamente dal sistema ed è probabilmente il motivo per cui si riscontra un comportamento incoerente quando si riprende.

Se l'attività viene distrutta dal sistema, dovrà essere ricreata quando la si riavvia. Quindi, a meno che l'autore dell'applicazione non abbia preso misure per salvare lo stato dell'applicazione durante il processo di distruzione, andrà perso (e il salvataggio dello stato esatto in cose come i giochi è abbastanza impraticabile).

Un altro documento valido (ma anche dettagliato) è quello relativo al ciclo di vita delle attività (c'è un bel diagramma di flusso se si scorre un po 'verso il basso).


Quindi vengono uccisi per attività, non per attività / processo. Quest'ultimo consentirebbe l'uccisione parziale delle attività, il che è probabilmente indesiderabile.
jiggunjer,

4

La pressione del tasto Home consente all'utente di avviare una nuova attività, mostrando il programma di avvio. Tutte le attività attive (e quindi le attività, incluso l'esempio "Controllo aereo") chiameranno il loro onPause()metodo.

Spetta all'app (e alla loro attività) ripristinare esattamente lo stato precedente quando torna visibile. È anche possibile che il processo delle app venga interrotto mentre l'attività è in background, ma ciò non dovrebbe influire sull'esperienza degli utenti. L'utente non dovrebbe essere in grado di dire la differenza se un'attività è stata appena messa in pausa o se è stata anche uccisa. Questo potrebbe spiegare il diverso comportamento di Air Control che potrebbe essere un suggerimento di un'implementazione errata della gestione del ciclo di vita di Android.


Penso che per "ucciso" intendi fermato, anziché distrutto. Credo nella normale terminologia di Linux quando si interrompe un processo (ad es. Attività) con destroy()i componenti delle app corrispondenti.
jiggunjer,

No, intendo dire distrutto.
Flusso

Quando si preme il tasto Home onStop, viene chiamato il metodo. Un processo interrotto non significa che l'attività venga onDestroyedchiamata il suo metodo, sebbene sia effettivamente simile. "Uccidere" un processo di attività significa che la VM viene rimossa dalla RAM. Per me questo (Android ucciderlo) sembra influenzare l'esperienza dell'utente.
jiggunjer,

4

La mia reputazione è ancora troppo bassa su questo sito per votare, quindi sto rispondendo per enfatizzare la risposta di Flow. Continuo a riscontrare questo problema in una delle mie app. Ho vari controlli di spinner e devi salvare esplicitamente il loro stato in onPause () e quindi ripristinare gli stati in onResume () - Android non ricorda automaticamente i loro stati.

Un'altra complicazione è che a volte Android chiamerà la funzione onCreate () di un'app quando ti aspetti che chiami onResume ().

Quindi il tuo problema con Air Control (o qualsiasi altra app) è specifico per quell'app e dovresti segnalare il comportamento allo sviluppatore per la correzione. La maggior parte delle app ha un'e-mail di contatto sul mercato.

A proposito, se vuoi capire il ciclo di vita delle app, raccomando il capitolo 2 di Hello Burn per Android, Android, in particolare la figura 2.3.


3

Pulsante Home premuto quando in un'app:

La maggior parte delle app salverà il loro stato (tutti i bit di dati che sarebbero necessari per mantenersi coerenti al momento della ripresa) e il dispositivo passerà all'app di avvio.

Pulsante Home Premuto quando nelle schermate Home:

Questo è configurabile da molti lanciatori di terze parti; tuttavia molti di loro sono predefiniti per riportarti alla schermata principale "principale" (l'avvio predefinito lo fa).

Cosa potrebbe interessare il tuo amico:

Il cambio di app può richiedere molta memoria e causare il salvataggio di più scritture su disco. Questo utilizza la batteria; tuttavia, di solito non è la causa principale del consumo della batteria dei dispositivi (i sistemi operativi sono ottimizzati per eseguire queste operazioni).

Alcune applicazioni continueranno a essere eseguite come applicazioni in background, quindi premendo il pulsante Home non le ucciderai (ad esempio, Google Play Music continuerà a essere riprodotto dopo aver premuto il pulsante Home).

Il tuo amico potrebbe essere preoccupato dal fatto che premendo il tasto Home non sei uscito dal programma, e quindi è ancora in esecuzione. Android scaricherà tali applicazioni se necessario.

Tu e il tuo amico dovreste essere più interessati al display, che utilizza la massima quantità di energia.

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.