Aplikacija radi savršeno dok gledate u ekran, a onda je zaključate i sve stane: poruke kasne, sinhronizacija se ne dešava, obavještenja stižu tek kad sami otvorite app. Pročitao sam dva tehnička teksta koja objašnjavaju šta se tačno dešava iza kulisa i shvatio da je ovo mnogo veći problem nego što programeri žele priznati, a korisnici mnogo rjeđe razumiju nego što misle.
Skoro svako ko koristi Android telefon ima ovo iskustvo, samo ga rijetko ko naziva pravim imenom. Poruka na WhatsAppu stigne pet minuta prije nego što je vidite, jer ste telefon držali zaključan u džepu. Notifikacija sa aplikacije za dostavu se pojavi tek kad slučajno upalite ekran da provjerite vrijeme. Bankovni kod za dvofaktorsku autentifikaciju stigne kasno, a vi već gledate u ekran drugi put jer prvi pokušaj nije prošao. Svi to doživljavaju kao kvar. Malo ko zna da je to, u stvari, dizajnirano ponašanje.
Pročitao sam dva teksta istog autora, jedan na Mediumu i jedan na Dev.to, koji objašnjavaju tehničku pozadinu ovog fenomena, jedan iz perspektive običnog korisnika koji pokušava da shvati zašto mu telefon “kasni”, drugi iz perspektive programera koji pokušava da napravi aplikaciju koja se ponaša predvidivo. Kad se ta dva ugla spoje, dobije se prilično jasna slika i, mislim, prilično jasan problem koji Google godinama gura pod tepih pod izgovorom “štednje baterije”.
Šta se zapravo dešava kad zaključate ekran
Da budem fer prema tehnologiji: ono što Android radi nije glupo. Kad je aplikacija otvorena i vidljiva, sistem joj daje visok prioritet, slobodan pristup mreži i procesorskom vremenu. Čim je zaključate, aplikacija prelazi u pozadinu i tu počinje priča koja je mnogo komplikovanija nego što izgleda.
Prvo se aktiviraju ograničenja pozadinskog izvršavanja, uvedena još sa Androidom 8.0. Aplikacija dobija kratak vremenski prozor da završi ono što je počela, a onda sistem gasi pozadinske servise kao da ih je aplikacija sama zaustavila. Zatim, ako telefon miruje duže vrijeme, sa isključenim ekranom i bez pokreta, uključuje se Doze, agresivniji režim štednje energije koji odgađa mrežni pristup, alarme i pozadinske poslove, i sve to grupiše u periodične “prozore” održavanja umjesto da dozvoljava svakoj aplikaciji da radi kad god poželi. Uz to ide i App Standby, koji dodatno ograničava aplikacije koje niste otvarali neko vrijeme, svrstavajući ih u kategorije poput “rijetko korišćena” ili “ograničena”, sa sve manje slobode za pozadinski rad.
Na sve to se nadograđuje ono što proizvođači telefona rade sami od sebe. Samsung, Xiaomi, Huawei i drugi dodaju svoje sisteme upravljanja baterijom, sa nazivima poput “Uspavane aplikacije”, “Automatsko pokretanje”, “Duboko uspavane aplikacije” i sličnim, koji se razlikuju od telefona do telefona i često su agresivniji od onoga što sam Android traži. Rezultat je da ista aplikacija na jednom telefonu radi besprijekorno u pozadini, a na drugom kasni satima, iako oba uređaja imaju istu verziju Androida.
Zašto mi ovo smeta više nego što bi trebalo tehničkoj sitnici
Mogao bih ovo ostaviti kao zanimljivu tehničku napomenu i preći dalje, ali mislim da tu postoji ozbiljniji problem koji se rijetko imenuje: ovo je sistem u kojem niko nije stvarno odgovoran kad nešto pođe po zlu.
Kad vam kasni bitna poruka, korisnik krivi aplikaciju. Programer krivi proizvođača telefona i njegove agresivne postavke baterije. Proizvođač telefona kaže da samo štiti bateriju, jer je to ono što kupci najviše traže i za šta ih testiraju mediji koji rade recenzije autonomije. Google kaže da su pravila jasno dokumentovana i da su tu radi dobrobiti korisnika. Svi su, formalno, u pravu. A poruka i dalje kasni.
Ono što me posebno nervira je da je ovaj sistem toliko fragmentiran da čak ni sami programeri, ljudi koji rade ovo za život, ne mogu pouzdano predvidjeti kako će se njihova aplikacija ponašati na svakom telefonu. Autor dev.to teksta doslovno navodi listu od deset različitih stanja koja treba testirati, uz komande za prisilno guranje telefona u Doze i simulaciju “uspavanih” aplikacija preko ADB-a, samo da bi mogao razumno pouzdano reći da li će notifikacija stići na vrijeme. To nije mali detalj za entuzijaste. To je znak da je sistem toliko nepredvidiv da zahtijeva laboratorijsko testiranje da bi se izbjeglo nešto što bi trebalo biti osnovna funkcija telefona: da vas obavijesti kad nešto stigne.
Kad “optimizacija” postane izgovor
Postoji jedna rečenica iz teksta koja mi je zapela za oko: da je Android osmišljen tako da ne dozvoli “svakoj instaliranoj aplikaciji da provjerava mrežu, pokreće tajmere, sinhronizuje podatke i budi telefon kad god joj se prohtije”. To je legitiman i tačan argument. Da nema tih ograničenja, baterija bi se trošila mnogo brže, a to niko ne želi.
Ali tu se krije i druga strana priče, koju bih volio da se češće naglašava: ta ista logika se koristi kao univerzalni izgovor za sve, uključujući situacije kada aplikacija radi tačno onako kako Google preporučuje, koristi push obavještenja umjesto stalnog provjeravanja servera, koristi WorkManager umjesto sopstvenog tajmera, a opet kasni jer je neki proizvođač telefona odlučio da agresivnije gasi procese nego što to standardni Android nalaže. U tom slučaju “štednja baterije” nije objašnjenje, nego prekrivanje loše implementacije proizvođača dobro zvučećim marketinškim terminom.
Ono što mene, kao korisnika, najviše frustrira jeste asimetrija informacija. Proizvođač telefona zna tačno šta radi njegov sistem za upravljanje baterijom. Google zna tačno kako Doze i App Standby funkcionišu. Programer aplikacije mora da nagađa, testira i čita neslužbene forume da bi shvatio zašto mu se korisnici žale. A korisnik, koji stoji na kraju tog lanca, samo vidi da mu poruka kasni i, sasvim razumno, zaključi da je aplikacija loša, iako je problem možda potpuno van njene kontrole.
Ko snosi posljedice u stvarnom životu
Ovo nije apstraktna programerska rasprava. Ima konkretne posljedice za obične ljude, i to češće nego što bismo pomislili.
Zamislite kurirsku firmu čija aplikacija javlja vozaču novu narudžbu, a obavještenje stigne sa zakašnjenjem jer je telefon vozača ušao u agresivan režim štednje baterije dok je vozilo mirovalo na semaforu. Zamislite roditelja koji čeka poruku od djeteta preko neke manje popularne aplikacije za razmjenu poruka, a poruka stigne tek kad roditelj slučajno pogleda telefon. Zamislite malu firmu u Bosni i Hercegovini koja razvija sopstvenu aplikaciju za komunikaciju sa klijentima i troši sedmice na debagovanje problema koji, ispostavi se, uopšte nije u njihovom kodu nego u tome što je testni telefon Xiaomi uređaj sa MIUI sistemom koji ima svoju posebnu listu “uspavanih aplikacija”.
Ovo je posebno bitno u zemljama poput naše, gdje su jeftiniji Android telefoni, često upravo oni proizvođača poznatih po agresivnom upravljanju baterijom, mnogo rasprostranjeniji nego u zapadnoj Evropi ili SAD-u. Kad programer u Silicijumskoj dolini testira aplikaciju na Pixelu ili novijem Samsungu, dobija jednu sliku. Kad ista aplikacija završi na jeftinijem telefonu prosječnog korisnika u regionu, ponaša se potpuno drugačije, a niko od uključenih strana to nije predvidio niti testirao.
Gdje vidim opravdanje, a gdje ne
Da budem fer, ne mislim da je cijeli koncept pogrešan. Doze i App Standby su rješavali stvaran problem, jer su prije njihovog uvođenja aplikacije stvarno znale da drastično prazne baterije radeći stvari u pozadini bez ikakve kontrole. Push obavještenja preko Firebase Cloud Messaginga su, tehnički gledano, bolje rješenje od stalnog “pitanja” servera da li ima novosti, i to je ispravan pravac razvoja.
Ono što ne mogu opravdati jeste nedostatak dosljednosti. Ako Google propisuje standard kroz Android platformu, onda taj standard treba da vrijedi svuda, a ne da svaki proizvođač telefona dodaje sopstveni sloj ograničenja koji korisnik ne razumije i programer ne može da testira unaprijed. Isto tako, ne mogu opravdati činjenicu da terminologija u podešavanjima telefona liči na lutriju: “Optimizovano”, “Ograničeno”, “Neograničeno”, “Uspavane aplikacije”, “Duboko uspavane aplikacije”, “Automatsko pokretanje”. Svaki proizvođač izmišlja sopstveni rječnik za, u suštini, istu stvar, i to direktno šteti korisniku koji pokušava da shvati zašto mu telefon ne radi kako očekuje.
Otvorena pitanja koja ostaju
Postoji nekoliko stvari koje me i dalje muče nakon čitanja oba teksta. Prvo, zašto Google, koji kontroliše sam Android i licencira Google usluge proizvođačima, nije uveo strožu obavezu ujednačavanja ponašanja baterijskog menadžmenta kao uslov za korišćenje Play prodavnice? Drugo, koliko prosječnih korisnika uopšte zna da postoji podešavanje “Neograničeno” za pojedinačne aplikacije, i da li je realno očekivati da neko ko nije programer prolazi kroz meni po meni da bi popravio nešto što bi trebalo raditi samo od sebe? Treće, koliko poslovnih gubitaka, propuštenih poruka i frustracija nastaje svaki dan zbog ove nevidljive borbe između baterije i pouzdanosti, a da se to nigdje ne mjeri niti prijavljuje kao problem?
Mislim da je ovo tema koja zaslužuje više pažnje nego što dobija, jer se tiče gotovo svakog vlasnika Android telefona, a rijetko ko zna da postoji objašnjenje iza onoga što doživljava kao običan glič. Kad sljedeći put primijetite da vam poruka kasni čim zaključate telefon, znajte da to nije slučajnost i nije nužno greška aplikacije. To je posljedica sistema koji pokušava da balansira između trajanja baterije i pouzdanosti komunikacije, i taj balans, iskreno, još uvijek nije dobro pogođen, ni za korisnike, ni za programere koji moraju da ga pretoče u kod koji radi na hiljadama različitih uređaja.
IZVORI: