9Aug
Când glisați o aplicație în lista de aplicații care se execută în prezent pe Android, ce se întâmplă exact cu aplicația și cu datele? Citiți-ne pe măsură ce investigăm.
Întrebarea de astăzi &Sesiunea de răspuns vine de la amabilitatea programului Android Enthusiast - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor web Q & A.
Întrebarea
Eldarerathis este entuziasmată de funcția de accesare a aplicațiilor, care vă permite să scoateți lista de aplicații care rulează prin intermediul butonului acasă și apoi să le glisați spre dreapta, probabil pentru a le închide:
Lista de aplicații recente dinIce Cream Sandwich a adăugat posibilitatea de a elimina aplicațiile din listă, respingându-le permanent( și din câte știu că aceasta este o funcție de vanilie, nu una CM / personalizată ROM).Documentația și punctele de interes ale platformei nu par să acopere funcționarea sub această hărțuire, dar sunt curios să știu ce face de fapt sistemul.
În plus, la curiozitatea mea, am hotărât să fac un test rapid: am început muzica pe o instalare CM9, apoi am renunțat. Apoi am verificat lista de aplicații recente și am văzut că era într-adevăr acolo( și în starea corespunzătoare, bazată pe miniatură).Apoi am intrat în Setări-> Aplicații și forță mi-a oprit aplicația Muzică, dar a fost încă listată în lista recentă, ceea ce ma determinat să cred că nu este conectat la procesele care se află în fundal.
Realizând acum că muzica ar fi putut fi o alegere proastă, am testat și cu aplicația USA Today. Acest lucru a arătat în esență același comportament și părea că a fost forțat să "revină" după oprirea forței( ceea ce are sens), deși miniaturile din lista de aplicații recente nu au reflectat acest lucru( în cache, presupun?).
Deci, ce se întâmplă de fapt la nivelul sistemului de operare atunci când deplasați o aplicație din lista recentă?Sterge pur și simplu datele din aplicație din memoria RAM și se colectează gunoi, distrugându-i starea salvată?
Ce se întâmplă exact când deplasați aplicația în afara listei?
Răspunsul
Contribuabilul Android entuziast Austin Mills oferă câteva idei:
Aplicațiile din aplicația recentă sunt vanilie și nu sunt bine documentate. Acesta a fost subiectul unui volum decent de discuții pe diverse forumuri Android. .. consensul pare să fie cel mai bine descris aici în câteva comentarii: comportamentul este similar, dar nu exact același lucru cu închiderea unei aplicații - în general( pentru aplicații carenu definiți manipularea explicită a butonului înapoi) este același lucru ca și când ați lovit destul de multe ori dintr-o aplicație pe care o ieșiți din ea.
Linkul are mai multe detalii cu privire la specificul, dar în general vă puteți gândi la el ca la ieșirea din aplicație.
Specific pentru aplicația Muzică, cred că începe un serviciu, astfel că, în timp ce sarcina în sine( aplicația Muzică / UI) poate fi închisă, serviciul continuă să ruleze în fundal, astfel încât muzica să nu se oprească brusc doar pentru căsarcina a fost eliminată din motive de gestionare a memoriei. Asta poate fi 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 răsfoi răspunsul:
Se pare că am găsit termenii de căutare magicieni care au dus la explicații de la angajații Google.În mod specific, am găsit câteva locuri diferite în care Dianne Hackborn explică ce se întâmplă când scuturăți ceva din lista recentă.Primul este un comentariu asupra uneia dintre postările din Google+:
[W] ce se întâmplă în mod special când treceți de o sarcină recentă este:( 1) ucide orice fundal sau procese goale ale aplicației( vedeți aici ceea ce înseamnă);și( 2) utilizează noul API pentru a informa orice servicii ale aplicației despre îndepărtarea sarcinii, astfel încât să poată face orice consideră potrivit.
De asemenea, notează într-un comentariu pe blog:
De fapt, eliminarea unei intrări în sarcinile recente va duce la uciderea oricăror procese de fond care există pentru proces. Nu va provoca în mod direct serviciile să se oprească, cu toate acestea există un API pentru ca aceștia să afle că sarcina a fost eliminată pentru a decide dacă doresc ca aceasta să însemne că ar trebui să se oprească.Acest lucru este în așa fel încât eliminarea spune că sarcina recentă a unei aplicații de e-mail nu va determina oprirea verificării mesajelor e-mail.
Dacă doriți cu adevărat să opriți complet o aplicație, puteți apăsa lung pe sarcini recente pentru a accesa informații despre aplicație și ați lovit forța acolo. Oprirea forțată este o ucidere completă a aplicației - toate procesele sunt ucise, toate serviciile sunt oprite, toate notificările eliminate, toate alarmele eliminate etc. Aplicația nu are voie să se lanseze din nou până când nu este cerută în mod explicit.
Deci, se pare că rezumatul este că deplasarea unei aplicații din listă va ucide mai întâi toate procesele de fundal pentru aplicație, apoi utilizați onTaskRemoved pentru a notifica aplicația că sarcina de fundal a fost eliminată.În acel moment se pare că este de până la App să decidă ce se întâmplă, așa că cred că există tehnic nu este o regulă greu și rapid despre ceea ce se întâmplă cu app dincolo de acest punct.
Trebuie să adăugați ceva la explicație? Sunați în comentariile. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.