If-Koubou

Ce se întâmplă exact când deplasați o aplicație Android din lista recentă de aplicații?

Ce se întâmplă exact când deplasați o aplicație Android din lista recentă de aplicații? (Cum să)

Când deplasați cu ușurință o aplicație în lista de aplicații care rulează în prezent în Android, ce se întâmplă exact cu aplicația și cu datele? Citiți-ne pe măsură ce investigăm.

Sesiunea de întrebări și răspunsuri din ziua de azi vine de la amabilitatea programului Android Enthusiast - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor de întrebări și răspunsuri.

Intrebarea

Cititorul de entuziast Android Eldarerathis este interesat de funcționalitatea de accesare a aplicațiilor, care vă permite să vă 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 recentă de aplicații din Ice 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.

Mai mult, adaugand curiozitatii mele, am decis sa fac un test rapid: am inceput muzica pe o instalare CM9, apoi am sustinut-o. 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 intratSetări-> Aplicații și forța a oprit aplicația Muzică, dar a fost încă listată în lista recentă, ceea ce ma determinat să cred că nu este legată de procesele care persistă î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 reflectau 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 atunci când deplasați aplicația în listă?

Raspunsurile

Android entuziast contribuitor Austin Mills oferă o oarecare perspectivă:

Deplasarea aplicațiilor din lista recenta de aplicații este vanilie și, da, nu este bine documentată. Acesta a fost subiectul unui volum decent de discuții pe diverse forumuri Android ... consensul pare să fie cel mai bine descris aici în unele comentarii: comportamentul este similar, dar nu exact același lucru cu închiderea unei aplicații - în general (pentru aplicații care nu 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 încât în ​​timp ce sarcina însăși (aplicația Muzică / interfața cu utilizatorul) poate fi închisă, serviciul continuă să ruleze în fundal, astfel încât muzica dvs. să nu se oprească brusc doar pentru că sarcina am 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 sa întors 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 din partea angajaților Google. În mod specific, am găsit câteva locuri diferite în care Dianne Hackborn explică ce se întâmplă atunci când scuturăți ceva din lista recentă. Primul este un comentariu asupra uneia dintre postările din Google+:

[W] se întâmplă în mod special atunci când eliminați o sarcină recentă: (1) ucide orice fundal sau procese goale ale aplicației (vedeți aici ceea ce înseamnă aceasta) și (2) utilizează noul API pentru a spune orice servicii de cererea 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 ucide orice proces de fundal care există pentru proces. Nu va provoca în mod direct serviciile să se oprească, dar există un API pentru ca aceștia să afle că sarcina a fost îndepărtată 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 sarcinile 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 permisiunea de a lansa din nou până când nu este cerută în mod explicit.

Deci, se pare că rezumatul este că împrăștierea unei aplicații din listă va ucide mai întâi toate procesele de fundal pentru aplicație, apoi va folosionTaskRemoved 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ă, deci cred că există tehnicnu este o regulă tare și rapidă despre ce se întâmplă cu aplicația dincolo de acest punct.

Aveți ceva de adăugat 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.