Buddy-mobiilisovelluksen optimointi : muistinhallinnan ja käyttöliittymän optimointi Android-sovelluksessa
Tenkula, Saku (2025)
Tenkula, Saku
2025
All rights reserved. This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-202503124127
https://urn.fi/URN:NBN:fi:amk-202503124127
Tiivistelmä
Buddy on Centria-ammattikorkeakoulun Capstone project -kursseilla luotu ohjelmisto. Ohjelmisto koostuu palvelimesta, mobiilisovelluksesta ja tietokannassa. Kun ensimmäinen ohjelmisto valmistui vuonna 2024, siitä löytyi merkittäviä muistinhallintaan, käyttöliittymään ja sovellusarkkitehtuuriin liittyviä ongelmia. Opinnäytetyössä keskityttiin korjaamaan muistinhallintaan ja käyttöliittymään liittyviä ongelmia. Työ keskittyi mobiilisovellukseen. Tavoitteena oli luoda uuteen sovellukseen responsiivisempi käyttöliittymä ja parantaa muistinhallintaa. Työ aloitettiin kartoittamalla teoriapohjaa parhaiden optimointikäytäntöjen varmistamiseksi. Tähän teoriapohjaan kuului keskeisiä käsitteitä ja käytäntöjä Android-sovelluksen optimoinnissa. Toiminnallinen osuus jaettiin lähtötilanteen kartoittamiseen, optimointivaiheeseen sekä tulosten tarkasteluun. Tuloksien tarkastelua varten suoritettiin kolme testiä. Työ tehtiin Android Studio -ohjelmointiympäristössä Java-ohjelmointikielellä.
Potentiaalisia muistiongelmia löytyi lähtötilanteessa säikeiden hallinnasta, sovellusarkkitehtuurista, aktiviteettien hallinnasta, resurssien vapautuksesta ja suurien tietuelistojen käsittelystä. Vanha sovellus käytti vain vahvoja viittauksia ohjelmakoodissa, mikä esti joissain tilanteissa viitattujen objektien vapautuksen. Käyttöliittymän ongelmia olivat muun muassa tarpeettoman syvät asetteluhierarkiat, aktiviteettiarkkitehtuuri ja tarpeeton rasterikuvien käyttö ikoneissa. Uusi sovellus luotiin käyttämään viittä aktiviteettia, joista jokainen sisälsi 3–4 fragmenttia. Säikeiden hallinta keskitettiin ja säikeille luotiin säiepooli. Aktiviteettiarkkitehtuuri rakennettiin niin, että taustalle jäävät aktiviteetit vapautetaan. Palveluita keskitettiin sovelluksen elinkaaresta vastaavalle instanssille. Palvelimelta tulleet vastaukset käsiteltiin paikallisesti ja abstrakteissa pohja-aktiviteettiluokissa vähennettiin niistä perittävän koodin määrää. Sovelluksen käyttöliittymää kevennettiin hyödyntämällä vektorigrafiikkaa, tasoittamalla asettelujen hierarkkista rakennetta ja käyttämällä tietuelistojen visualisointiin RecyclerView-komponenttia. Tuloksissa havaittiin sovelluksen muistin käytön tasaantuneen. Tyypillisesti muistin käyttö oli alle 200 megatavua uudessa sovelluksessa sen koko elinkaaren aikana ja käyttämättömät objektit vapautuivat. Vanhassa sovelluksessa muistin käyttö nousi koko sovelluksen elinkaaren ajan. Uudessa sovelluksessa tietuelistojen käsittely oli tehokkaampaa ja subjektiivisten havaintojen perusteella sovellus tuntui responsiivisemmalta. Näitä havaintoja tuki teoriapohja.
Potentiaalisia muistiongelmia löytyi lähtötilanteessa säikeiden hallinnasta, sovellusarkkitehtuurista, aktiviteettien hallinnasta, resurssien vapautuksesta ja suurien tietuelistojen käsittelystä. Vanha sovellus käytti vain vahvoja viittauksia ohjelmakoodissa, mikä esti joissain tilanteissa viitattujen objektien vapautuksen. Käyttöliittymän ongelmia olivat muun muassa tarpeettoman syvät asetteluhierarkiat, aktiviteettiarkkitehtuuri ja tarpeeton rasterikuvien käyttö ikoneissa. Uusi sovellus luotiin käyttämään viittä aktiviteettia, joista jokainen sisälsi 3–4 fragmenttia. Säikeiden hallinta keskitettiin ja säikeille luotiin säiepooli. Aktiviteettiarkkitehtuuri rakennettiin niin, että taustalle jäävät aktiviteetit vapautetaan. Palveluita keskitettiin sovelluksen elinkaaresta vastaavalle instanssille. Palvelimelta tulleet vastaukset käsiteltiin paikallisesti ja abstrakteissa pohja-aktiviteettiluokissa vähennettiin niistä perittävän koodin määrää. Sovelluksen käyttöliittymää kevennettiin hyödyntämällä vektorigrafiikkaa, tasoittamalla asettelujen hierarkkista rakennetta ja käyttämällä tietuelistojen visualisointiin RecyclerView-komponenttia. Tuloksissa havaittiin sovelluksen muistin käytön tasaantuneen. Tyypillisesti muistin käyttö oli alle 200 megatavua uudessa sovelluksessa sen koko elinkaaren aikana ja käyttämättömät objektit vapautuivat. Vanhassa sovelluksessa muistin käyttö nousi koko sovelluksen elinkaaren ajan. Uudessa sovelluksessa tietuelistojen käsittely oli tehokkaampaa ja subjektiivisten havaintojen perusteella sovellus tuntui responsiivisemmalta. Näitä havaintoja tuki teoriapohja.