viewModelScope ja Dispatchers
Suorittakaa työ oikeassa säikeessä.
viewModelScope ja Dispatchers on ilmainen Android Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Android Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Android Academy-kurssilla on yhteensä 4 oppituntia.
Elinkaaren huomioivat scopet
Android tarjoaa valmiita scopeja, jotka peruutetaan automaattisesti:
viewModelScope— peruutetaan, kun ViewModel poistetaan.lifecycleScope— sidottu Activityn tai Fragmentin elinkaareen.
viewModelScope-funktion käyttäminen
Käynnistä tietotyö viewModelScope-scopessa. Kun ViewModel poistetaan, korutiini peruutetaan puolestasi — manuaalista siivousta ei tarvita.
class UserViewModel(
private val repo: UserRepository
) : ViewModel() {
fun load() {
viewModelScope.launch {
val users = repo.getUsers()
_uiState.value = UiState(users)
}
}
}Miksi GlobalScopea ei pidä käyttää
Vältä GlobalScope-scopea: sen korutiinit elävät koko sovelluksen ajan eivätkä ole sidottuja elinkaareen, mikä aiheuttaa vuotoja ja työn jatkumista näytön poistumisen jälkeen.
Mitä Dispatcherit ovat
Dispatcher määrittää, millä säikeellä (tai säiepoolilla) korutiini suoritetaan. Oikean dispatcher-valinnan ansiosta pääsäie pysyy vapaana.
Vakiomuotoiset Dispatcherit
Dispatchers.Main— käyttöliittymäsäie.Dispatchers.IO— verkko- ja levyoperaatioihin.Dispatchers.Default— suoritinta kuormittavaan työhön.
viewModelScope käyttää oletuksena Main-dispatcheria
viewModelScope käynnistää korutiinit Dispatchers.Main-dispatcherilla. Tämä sopii tilan päivittämiseen, mutta raskas työ kannattaa siirtää sen ulkopuolelle.
Vaihtaminen withContext-funktiolla
Käytä withContext-funktiota suorittaaksesi koodilohkon toisella dispatcherilla ja palataksesi sen jälkeen kutsujan kontekstiin.
suspend fun loadFile(): String =
withContext(Dispatchers.IO) {
File("data.txt").readText()
}Pääsäieturvalliset funktiot
Funktio on pääsäieturvallinen, jos sitä on turvallista kutsua pääsäikeestä, koska se vaihtaa tarvittaessa sisäisesti oikeaan dispatcher-kontekstiin. Repositorion tulisi olla pääsäieturvallinen, jotta kutsujien ei tarvitse huolehtia säikeistä.
class Repo {
suspend fun getUsers() =
withContext(Dispatchers.IO) { dao.getAll() }
}Room ja Retrofit ovat pääsäieturvallisia
Hyviä uutisia: Roomin suspend-DAO-metodit ja Retrofitin suspend-kutsut suoritetaan jo pääsäikeen ulkopuolella. Niitä varten ei yleensä tarvita erillistä withContext-kutsua.
Suoritinta kuormittava työ Default-dispatcherilla
Käytä raskaaseen laskentaan, kuten valtavan luettelon lajitteluun tai jäsentämiseen, Dispatchers.Default-dispatcheria, jotta käyttöliittymä ei hidastu.
val sorted = withContext(Dispatchers.Default) {
bigList.sortedBy { it.score }
}Dispatcherien injektointi
Testattavuuden parantamiseksi injektoi dispatcherit sen sijaan, että määrittelisit ne suoraan koodissa. Näin testit voivat käyttää test-dispatcheria.
class Repo(
private val io: CoroutineDispatcher = Dispatchers.IO
) {
suspend fun load() = withContext(io) { /* ... */ }
}Pikatesti
Testaa, miten hyvin ymmärrät scopet ja dispatcherit.
Kertaus
Opit seuraavat asiat:
viewModelScopeperuuttaa korutiinit, kun ViewModel poistetaan.- Vältä
GlobalScope-scopea. - Valitse dispatcherit: Main (käyttöliittymä), IO (verkko/levy), Default (suoritin).
withContextvaihtaa säiettä; pyri käyttämään pääsäieturvallisia funktioita.
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 36
- Oppitunnit
- 152
Usein kysytyt kysymykset
Onko oppitunti ”viewModelScope ja Dispatchers” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Android Academy-oppimispolun 3 oppituntia, myös oppitunnin “viewModelScope ja Dispatchers”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Android Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”viewModelScope ja Dispatchers”?
Suorittakaa työ oikeassa säikeessä. Harjoittelet Android Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Android Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Android Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”viewModelScope ja Dispatchers”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Android Academy-oppitunnilla?
Kyllä. Jokainen Android Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Korutiinien perusteet ja käyttöalueet
- viewModelScope ja Dispatchers
- Kotlin Flow -perusteet
- StateFlow ja SharedFlow