Procese și fluxuri, fan-club pentru utilizatori și Android

Atunci când cel puțin una dintre componentele aplicației (sau întreaga aplicație) este solicitată, sistemul Android inițiază un proces care conține singurul fir principal care trebuie executat. În mod implicit, toate componentele aplicației funcționează în acest proces și în fire.







Cu toate acestea, vă puteți asigura că componentele funcționează în alte procese și generează fire suplimentare pentru orice proces.

Toate componentele sunt inițializate în firul principal al procesului. Fire individuale pentru fiecare instanță nu sunt de obicei create. În consecință, toate metodele de apel invers definite în componenta, și a provocat sistemul funcționează întotdeauna practic fluxul de proces. Acest lucru înseamnă că, componenta nu trebuie să efectueze în metodele operațiunilor consumatoare de timp de apel invers (de exemplu, descărcări de fișiere din rețea, sau pentru a calcula cicluri) sau blocarea apelului sistem, adică. K. Acest lucru blochează orice alte componente ale procesului. Pentru astfel de operațiuni, se generează fluxuri separate.

Ciclul de viață al proceselor

Android poate decide să finalizeze procesul în caz de lipsă de memorie sau dacă memoria este solicitată de alte procese mai importante. Componentele aplicate care rulează în aceste procese vor fi distruse. Procesul va fi repornit pentru componente dacă sunt chemați din nou.

Atunci când alegeți un proces pentru a distruge Android evaluează importanța relativă a acestui proces din punctul de vedere al utilizatorului, și anume. E. Vizibil pentru componenta de utilizare a procesului, cum ar fi activitățile în prim-plan, este considerată o componentă mai importantă decât serviciile care rulează într-un alt proces. De asemenea, sistemul este în primul rând pentru a finaliza procesul de telnostyami Dey care nu mai sunt vizibile pe ecran, mai degrabă decât un proces cu activități vizibile. Prin urmare, decizia de a finaliza procesul depinde de starea componentelor care rulează în proces.

Prioritatea și starea proceselor

Ordinea în care procesele sunt distruse la resursele libere este determinată de prioritate. Sistemul Android încearcă să mențină procesul de aplicare cât mai mult timp posibil, dar, în cele din urmă, va trebui să ștergă vechile procese dacă memoria liberă se termină. Pentru a determina ce proces să salvați sau să distrugeți, Android creează o ierarhie a importanței proceselor pe baza componentelor care rulează în procese și a stării acestor componente.

Procesele cu cea mai mică importanță sunt distruse mai întâi. Există cinci nivele în ierarhia de importanță. Următoarea listă le prezintă în ordinea descrescătoare a importanței.







  • Un proces activ (proces în prim plan) este unul necesar pentru ceea ce face în prezent utilizatorul. Procesul este considerat activ dacă sunt îndeplinite oricare dintre următoarele condiții:
  • procesul desfășoară activitatea cu care interacționează utilizatorul;
  • procesul realizează un serviciu care este legat de activitatea cu care interacționează utilizatorul;

Procese și fluxuri, fan-club pentru utilizatori și Android

  • procesul are un obiect Service și se execută una dintre metodele de apel invers definită în acest obiect;
  • procesul are un obiect BroadcastReceiver și metoda de retur este executată pentru a primi intenția.

În același timp, pot exista doar câteva procese prioritare. Acestea vor fi distruse doar ca o ultimă soluție - dacă memoria este atât de mică încât toți împreună nu pot continua să lucreze.

  • Proces vizibil (proces vizibil) - unul care nu are componente prioritare. O componentă din acest proces poate fi apelată de utilizator. Procesul este considerat vizibil dacă este îndeplinită oricare dintre următoarele condiții:
  • Acesta este un proces de activitate care nu este focalizat, dar este încă vizibil pentru utilizator. Acest lucru se poate întâmpla, de exemplu, atunci când apelați un dialog care nu ocupă întregul ecran, iar activitatea sa pierdut, dar este vizibilă de utilizator și se află în spatele dialogului;
  • este un serviciu care este în prezent asociat cu activități în prim plan (sau parțial închis de alte activități).
  • Un proces vizibil este considerat important și nu va fi distrus în timp ce procesele cu o prioritate mai mică rămân.

Dacă mai multe componente rulează în același proces, Android determină prioritatea procesului pentru componenta cu cea mai mare prioritate. De exemplu, dacă un serviciu și o activitate vizibilă sunt difuzate în cadrul procesului, procesul va fi clasificat ca vizibil și nu ca proces de serviciu.

Dacă alte procese depind de un anumit proces, rangul său poate fi, de asemenea, mărit. Procesul, care servește un alt proces nu poate fi o prioritate mai mică decât procesul pe care îl deservește. De exemplu, dacă în procesul de kontentprovayder O deservește clienți în acest proces, sau în cazul în care serviciul este în procesul A este asociat cu o componentă în procesul B, atunci procesul A va primi prioritate nu este mai mică decât prioritatea procesului B.

Deoarece procesul de service are un rang superior activității de fundal, procesele de fundal care necesită o lungă perioadă de timp pentru a finaliza (de exemplu, transmisia de date prin rețea), dar care trebuie garantate pentru a finaliza, deseori execută un serviciu separat, în loc să genereze pur și simplu un fir în activitate. Acest lucru este important dacă operația de transfer de date prin rețea continuă mai mult timp decât fereastra de activitate din care a pornit această operație va rămâne în procesul vizibil (va fi vizibil pe ecranul dispozitivului mobil). Din același motiv, receptoarele de intenții de difuzare ar trebui să utilizeze serviciile, mai degrabă decât să pună pur și simplu operațiuni care necesită mult timp în flux.







Articole similare

Trimiteți-le prietenilor: