Pagina principala » HOWTO » 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?

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

    Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea entuziastului Android - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor web Q & A.

    Intrebarea

    Android entuziast cititor Eldarerathis este curios cu privire la funcția de glisare 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 recentă de aplicații din Ice Cream Sandwich a adăugat posibilitatea de a elimina aplicațiile din listă, respingându-le definitiv (ș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 sistemul în realitate.

    Mai mult, adăugându-mă la curiozitatea mea, am decis să fac un test rapid: am pornit Muzică pe o instalare CM9, apoi am renunțat. Apoi am verificat lista de aplicații recente și am văzut că este într-adevăr acolo (și în starea corespunzătoare, bazată pe miniatură). Apoi am intrat Setă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 conectat la 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 prezentat practic același comportament și părea că a fost forțat să "relanseze" după oprirea forței (ceea ce are sens), deși miniaturile din lista recenta de aplicații nu reflectau acest lucru (în cache, ghicitul?).

    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, iar gunoi-ul îl colectează, distrugându-i starea salvată?

    Ce se întâmplă exact când deplasați aplicația în listă?

    Raspunsurile

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

    Deplasarea aplicațiilor din lista recentă 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 repetarea de câteva ori din cadrul unei aplicații 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 î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 niște 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ă atunci când scuturăți ceva din lista recentă. Primul este un comentariu la una 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ă API-ul nou 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 distruge orice proces de fundal care există pentru proces. Nu va provoca în mod direct serviciile să se oprească, însă există un API pentru ca aceștia să afle că sarcina a fost eliminată pentru a decide dacă doresc ca acest lucru să însemne că ar trebui să se oprească. Acest lucru este astfel încât înlăturarea spune sarcina recentă a unei aplicații de e-mail nu va determina oprirea verificării e-mail-ului.

    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 voie să se lanseze din nou până când nu se solicită 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 folosi 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ă 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.