Alfa biblioteka Remote Compose omogućuje kreiranje interaktivnih igračkih widgeta na Androidu
Public- 20 Oct, 2026

Razvojnici Androida sada mogu kreirati visoko interaktivne igračke widgete pomoću nove alfa biblioteke Remote Compose. Iako Jetpack Glance ostaje standard za većinu implementacija widgeta zbog unazad kompatibilnosti i alata, on se oslanja na zastarjeli sustav RemoteViews. Taj sustav ima značajna ograničenja, posebno nemogućnost korištenja matematičkih izraza za kontinuirane animacije i strogu kontrolu sustava nad veličinom i učestalošću ažuriranja. Remote Compose rješava te praznine pružajući fleksibilni okvir za kreiranje animacija i složenih interakcija koje su prethodno bile nemoguće ili su zahtijevale nepodržane hake u ekosustavu RemoteViews.
Arhitektura Remote Compose razdvaja definiciju korisničkog sučelja od njegova izvršavanja. Vaša aplikacija izvršava deklarativni kod označen s @RemoteComposable kako bi serializirala rasporede i izraze animacija u kompaktni binarni format poznat kao Remote Document. Taj dokument šalje se u host proces, na primjer u launcher početnog ekrana. Unutar hosta, player Remote Compose lokalno obrađuje sve interakcije, promjene veličine, promjene stanja i animacije. Ovaj pristup sličan je radu web preglednika koji prikazuje HTML dokument. Budući da player upravlja ažuriranjima neovisno u vlastitom procesu, glavna aplikacija ne mora ostati aktivna. Ovaj mehanizam drastično smanjuje broj ciklusa međuprogresne komunikacije (IPC), što dovodi do manjih kašnjenja i smanjene potrošnje baterije u usporedbi s tradicionalnim widgetima RemoteViews, gdje aplikacija mora slati ažuriranja sučelja.
Za implementaciju ove tehnologije, programeri moraju dodati određene ovisnosti u svoj projekt, uključujući remote-core, remote-creation i remote-creation-compose iz grupe androidx.compose.remote, trenutačna verzija je 1.0.0-alpha21. Klasa widgeta mora nasljeđivati RemoteComposeWidget, koji proširuje AppWidgetProvider. Programeri definiraju korisničko sučelje pomoću Remote Composablesa, kao što su RemoteBox, RemoteColumn, RemoteRow i RemoteText. Metoda onUpdate kompajlira raspored u serializirani Remote Document i šalje ga launcheru putem updateRemoteView. Iako Remote Compose ponovno koristi RemoteViews teret kao mehanizam prijenosa, programeri ne komuniciraju izravno s tim slojem prijenosa. Sustav registrira widget putem standardne konfiguracije primaoca u AndroidManifest.xml s filterom namjere APPWIDGET_UPDATE.
Upravljanje stanjem u Remote Composeu nudi dva različita pristupa: lokalno stanje domaćina i trajno spremanje na strani aplikacije. Lokalno stanje domaćina nalazi se unutar Remote Documenta na uređaju domaćina, što ga čini pogodnim za privremene podatke sesije, poput rezultata u igri, koji se mogu poništiti kada se izdaje novi dokument ili kada se launcher ponovno pokrene. Trajno spremanje na strani aplikacije potrebno je za stanje koje mora preživjeti ažuriranja dokumenata i ponovna pokretanja launchera, kao što su inventar korisnika ili napredak. Budući da Android ne obavještava aplikaciju kada se launcher ponovno pokrene u pozadini, umjesto toga reproducirajući zadnji keširani dokument, ključni podaci moraju se spremiti u pohranu aplikacije. Na primjer, widget virtualnog ljubimca može dijeliti valutu novčića s aplikacijom trgovine, dok igra u žanru side-scrollera čuva svoj rezultat potpuno unutar Remote Documenta.
Glavna snaga Remote Composea leži u grafovima izraza s dinamičkim referencama. Ovi grafovi su matematičke formule predstavljene kao povezani čvorovi, gdje neki čvorovi sadrže varijable nazvane dinamičke reference. Player domaćina izravno ažurira te reference, omogućujući korisničkom sučelju widgeta da se ažurira u svakom kadru uređaja bez buđenja procesa aplikacije. Programeri stvaraju ove grafove posredno putem koda. Na primjer, brojač dodira može se implementirati pomoću MutableRemoteInt i funkcija valueChange. Kada korisnik dodirne widget, domaćin lokalno ažurira dinamičku referencu. Ovaj mehanizam osigurava da čak i složene animacije po kadru učinkovito rade na uređaju domaćina, držeći proces aplikacije u stanju pauze i štedeći sustavske resurse.