Tallenna ja palauta Instanssitila helpoksi!

yksinkertaisia sovelluksia tekevänä aloittelijana saatat huomata testauksen aikana, että näytön kierto Nollaa kaiken käyttäjältä kerätyn datan. Näytön kierto on yksi monista elinkaaren muutoksista Android, joka voi tuhota ja luoda uudelleen toimintaa ja aiheuttaa kaikki tiedot menetetään! Ei hyvä käyttökokemus.

voit valmistaa sovelluksesi näihin aktiviteetin elinkaaren muutoksiin kahdella tavalla, jotka voit lisätä Mainactiveen tallentaaksesi ja palauttaaksesi tiedot:

  1. onSaveInstanceState ()
  2. onRestoreInstanceState()

onSaveInstanceState () – menetelmän avulla voit lisätä avain/arvopareja sovelluksen ulkotilaan. Sitten onRestoreInstanceState () – menetelmällä voit hakea arvon ja asettaa sen takaisin muuttujaan, josta se on alun perin kerätty.

jotta sovellus valmistuisi käyttämään näitä, on tärkeää luoda instanssimuuttujat kaikille tiedoille, jotka on säilytettävä, kun sovelluksen tila aiheuttaa toiminnan tuhoutumisen. Nämä muuttujat eivät kuulu mihinkään menetelmiin, ja niihin pääsee käsiksi mistä tahansa luokan osasta.

haluat myös tunnistaa näkymät, jotka näyttävät nämä tiedot käyttäjälle, ja ilmoittaa, että haluat tietojen jatkuvan täällä, Kun toiminto palautetaan attribuutilla:

android:freezesText="true"

onSaveInstanceState ():

tätä menetelmää kutsutaan Androidin vanhemmissa versioissa ennen onstopia() ja uudemmissa versioissa sitä voidaan kutsua onstopin () jälkeen.

 1 @Override
2 protected void onSaveInstanceState(Bundle outState) {
3 super.onSaveInstanceState(outState);
4 outState.putInt("AStringKey", variableData);
5 outState.putString("AStringKey2", variableData2);
6 }

Lets break this method down:

  1. ohitus rivillä yksi osoittaa, että aiotte ohittaa menetelmän oletusilmoituksen.
  2. menetelmän allekirjoitus rivillä kaksi alkaa access-modifierilla ”protected”, mikä osoittaa, että menetelmää voi käyttää vain itse luokassa, paketissa tai alaluokassa. Tämän menetelmän palautustyyppi on ”mitätön”, koska se ei palauta mitään tietoja. Parametri tämä menetelmä vie on Bundle tyyppi objekti nimeltä outState.
  3. koska ohitamme tämän oletustavan, meidän on käytettävä Superia (linjalla kolme) kaikkien outState-oletustietojen tallentamiseen.
  4. nelosrivillä voi alkaa tallentaa omia tietojaan. onSavedInstanceState () kutsutaan käyttämällä pisteen merkintää sovelluksen ulkotilassa. Ensimmäinen argumentti on mikä tahansa merkkijono, ja sitä käytetään avaimena (samaan tapaan kuin muuttujan asettamista) toisen argumentin tallentaman arvon saamiseksi. Tässä olemme antaneet esimerkiksi muuttuja, joka tallentaa kokonaisluku arvo. Huomiorivi viisi on hyvin samankaltainen lukuun ottamatta sitä, että outstatessa tallennetaan Merkkijonotyyppistä muuttujaa.

onstoreinstancestate ():

tätä menetelmää kutsutaan onstartin () jälkeen.

 1 @Override
2 protected void onRestoreInstanceState(Bundle savedInstanceState){
3 super.onRestoreInstanceState(savedInstanceState);
4 variableData = savedInstanceState.getInt("AStringKey");
5 variableData2 = savedInstanceState.getString("AStringKey2");
6 }

Lets break this method down:

  1. ohitus rivillä yksi, osoittaa, että olet menossa ohittaa oletusilmoituksen menetelmän.
  2. menetelmän allekirjoitus rivillä kaksi alkaa access-modifierilla ”protected” Tämä osoittaa, että menetelmää voi käyttää vain itse luokassa, paketissa tai alaluokassa. Tämän menetelmän palautustyyppi on ”mitätön”, koska se ei palauta mitään tietoja. Parametri tämä menetelmä vie on nippu tyyppi objekti nimeltään savedInstanceState.
  3. koska ohitamme tämän oletustavan, meidän täytyy käyttää super, rivillä kolme, palauttaa kaikki oletustiedot savedInstanceState.
  4. koska olet tallentanut asiaankuuluvat sovellustietosi instanssimuuttujiin, asetat outstateen tallentamasi tiedot takaisin muuttujaan kutsumalla savedinstancestate-ohjelman get-menetelmää pistetunnisteella ja annat argumentiksi datan tallentamiseen käytetyn Merkkijononäppäimen.

toivon, että tämä selitys auttaa ymmärtämään paremmin näitä menetelmiä ja niiden käyttöä. Lisätietoja käy toiminta dokumentaatio Android.

Hyvää Koodausta!