Când glisați o aplicație de pe lista de aplicații Android care rulează în prezent, ce se întâmplă exact cu aplicația și datele? Citiți mai departe pe măsură ce investigăm.
Sesiunea Întrebări și răspunsuri de astăzi ne vine cu amabilitatea Android Enthusiast - o subdiviziune a Stack Exchange, o grupare de site-uri web de întrebări și răspunsuri bazată pe comunitate.
Intrebarea
Cititorul Android Enthusiast Eldarerathis este curios despre funcționalitatea de glisare a aplicației care vă permite să trageți în sus lista de aplicații care rulează prin butonul de pornire și apoi să le glisați spre dreapta, probabil pentru a le închide:
Lista recentă de aplicații din Ice Cream Sandwich a adăugat capacitatea de a glisa aplicațiile din listă, respingându-le astfel definitiv (și din câte știu, aceasta este o funcție de vanilie, nu una CM / ROM personalizată). Documentația și elementele esențiale ale platformei nu par să acopere funcționarea sub capotă a acestei funcționalități, dar sunt curios să știu ce face sistemul de fapt.
În plus, adăugând curiozitatea mea, am decis să fac un test rapid: am pornit Music pe o instalație CM9, apoi am renunțat la ea. Am verificat apoi lista recentă de aplicații și am văzut că era într-adevăr acolo (și în starea corectă, pe baza miniaturii). Am intrat apoi în
Setări-> Aplicațiiși forța a oprit aplicația Muzică, dar a fost încă listată în lista recentă, ceea ce m-a făcut să cred că nu este legată de procesele care persistă în fundal.Dându-mi seama acum că este posibil ca muzica să fi fost o alegere slabă, am testat și cu aplicația USA Today. Acest lucru a prezentat practic același comportament și se părea că a fost forțat să „relanseze” după oprirea forței (ceea ce are sens), deși miniatura din lista recentă de aplicații nu reflecta acest lucru (în cache, cred?).
Deci, ce se întâmplă de fapt la nivelul sistemului de operare atunci când glisați o aplicație din lista recentă? Șterge pur și simplu datele aplicației din RAM și gunoiul le colectează, distrugând starea salvată?
Ce se întâmplă exact când glisați aplicația din listă?
Raspunsurile
Contribuitorul Android Enthusiast Austin Mills oferă câteva informații:
Ștergerea aplicațiilor din lista de aplicații recente este vanilie și da, nu este bine documentată. Acesta a fost subiectul unei discuții decente pe diferite forumuri Android ... consensul pare să fie cel mai bine descris aici în câteva comentarii : că comportamentul este similar, dar nu exact același cu închiderea unei aplicații - în general (pentru aplicațiile care nu definesc manipularea explicită a butonului înapoi) este același lucru cu a da înapoi suficient de multe ori dintr-o aplicație din care ieșiți din aceasta.
Link-ul are câteva detalii suplimentare cu privire la particularități, dar, în general, vă puteți gândi că renunțați la aplicație.
Specific aplicației Music, cred că pornește un serviciu, așa că, în timp ce sarcina în sine (aplicația Music / UI) poate fi închisă, serviciul continuă să ruleze în fundal, astfel încât muzica dvs. să nu se oprească brusc doar pentru că sarcina a fost eliminat din motive de gestionare a memoriei. Poate că asta a afectat ceea ce ai văzut.
Apoi, participând la cercul de întrebări și răspunsuri al vieții, Eldarerathis a revenit cu câteva cercetări proprii pentru a completa complet răspunsul:
Se pare că am găsit termenii de căutare magici care au condus la explicații de la angajații Google. Mai exact, am găsit câteva locuri diferite în care Dianne Hackborn explică ce se întâmplă atunci când glisezi ceva din lista recentă. Primul este un comentariu la una dintre postările ei Google+ :
[W] ceea ce se întâmplă în mod specific atunci când glisați o sarcină recentă este: (1) omoară orice fundal sau procese goale ale aplicației (consultați aici pentru ceea ce înseamnă asta), și (2) folosește noul FOC să spună oricărui serviciu al aplicației despre sarcina eliminată, astfel încât să poată face tot ce crede că este potrivit.
Si ea note într-un comentariu de blog :
De fapt, eliminarea unei intrări din activitățile recente va distruge orice proces de fundal care există pentru proces. Nu va face ca serviciile să se oprească în mod direct, cu toate acestea există un API pentru a afla că sarcina a fost eliminată pentru a decide dacă doresc ca acest lucru să însemne că ar trebui să se oprească. Acest lucru se întâmplă astfel încât eliminarea să spună că sarcina recentă a unei aplicații de e-mail nu va determina oprirea verificării e-mailului.
Dacă doriți cu adevărat să opriți complet o aplicație, puteți apăsa îndelung sarcinile recente pentru a accesa informațiile despre aplicație și apăsați forța opriți acolo. Oprirea forțată este o distrugere completă a aplicației - toate procesele sunt ucise, toate serviciile oprite, toate notificările eliminate, toate alarmele eliminate, etc. Aplicația nu are voie să se lanseze din nou până nu este solicitată în mod explicit.
Deci, se pare că rezumatul este că glisarea unei aplicații din listă va ucide mai întâi toate procesele de fundal pentru aplicație, apoi se va utiliza
onTaskRemovedpentru a notifica aplicația că sarcina de fundal a fost eliminată. În acel moment, se pare că depinde de aplicație să decidă ce se întâmplă, așa că cred că tehnic nu este o regulă dificilă și rapidă despre ceea ce se întâmplă cu aplicația dincolo de acel moment.