Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Ajastettujen tehtävien tallennus tietokantaan

Macro [23.11.2013 21:26:59]

#

Moro!

Teen tässä Android-ohjelmaa, jolla pystyy ajastamaan erilaisia asioita, kuten puhelimen esimerkiksi mykäksi tiettynä ajankohtana tai laittamaan automaattisesti Bluetoothin pois päältä vaikka koko maaliskuuksi.

Nyt tarkoitus olisi jotenkin tallentaa kaikki käyttäjän valinnat tietokantaan. Mietin tässä, että mikä olisi järkevin tapa sulloa kaikki data sinne. Ajastukseen tulee aina seuraavat tiedot:

- Nimi
- Aloitusaika (tunnit ja minuutit)
- Lopetusaika (tunnit ja minuutit)
- Viikonpäivät, jolloin hälytys toistetaan
- Aloituspäivämäärä (päivä, jolloin ajastus alkaa)
- Lopetuspäivämäärä (päivä, jolloin ajastustehtävä lopetetaan)

Lisäksi sitten on mahdollista valita erilaisia toimintoja suoritettavaksi, kun ajastus laukeaa. Äänille voidaan asettaa aloitus- ja lopetustehtävät: Alkaessa äänet voi mykistää, laittaa värinälle tai asettaa oman äänenvoimakkuustason nollasta sataan. Ajastuksen loppuessa voidaan valita suoritettavaksi äänten palautus alkuperäiseen tasoon, laitettavaksi äänet 100 % voimakkuudelle, asetettavaksi äänenvoimakkuus halutulle tasolle tai jättämällä se niin kuin on.

Bluetoothille, lentokonetilalle, GPS:llä, näytön kierrolle ja WLAN:lle voidaan asettaa aloitusoperaatioksi niiden käyttöönotto tai sammutus. Lopetustehtäväksi voidaan asettaa seuraavat: päälle, pois, alkuperäisen tilan palautus tai älä tee mitään.

Jos esimerkiksi aloitusaika on 12:15, lopetusaika 16:55, aloituspäivämäärää ei ole asetettu, lopetuspäivä 31.12.2013 ja viikonpäiviksi on valittu maanantai, keskiviikko ja torstai, ajastus laukeaa joka maanantai, keskiviikko ja torstai aina 31.12.2013 asti kello 12:15 ja asettaa halutut ominaisuudet. Kun kello on 16:55 samana päivänä, tehdään uudet operaatiot.

Mietinpähän vaan, että miten nämä olisi järkevä tallentaa tietokantaan. Kohdat kuten nimi, aloitusaika ja lopetusaika esimerkiksi on järkevä tallentaa omina sarakkeinaan, mutta miten kaikki nämä kuvailemani tehtävät? Jos jokaiselle mahdolliselle operaatiolle luo oman sarakkeensa, taulussa on aikas runsaasti tavaraa. Olisiko järkevämpi tallentaa tietokantaan (Android käyttää SQLiteä) jokin JSON-objekti, vai luoda jokin erilainen rakenne?

Ideoita otetaan vastaan!

-tossu- [24.11.2013 00:34:08]

#

Tallennettavan tiedon määrä on todennäköisesti niin pieni, että sen tallentaminen tietokantaan on turhaa. Yksi ajastus mahtuu helposti sataan tavuun ja niitä tuskin on parhaimmillaankaan montaa kymmentä.

Helpoin ja vähiten virhealtis ratkaisu on laittaa kaikki ajastukset taulukkoon, pitää sitä koko ajan muistissa ja ennen ohjelman sulkeutumista serialisoida se esimerkiksi tiedostoon tai tallentaa muulla helpolla tavalla.

Ajastuksia hoitava taustaprosessi voi käydä taulukon kerran minuutissa läpi ja ajaa kohdalle osuvat tehtävät. Prosessia voi tarvittaessa optimoida siten, että käydessään taulukon läpi se hakee seuraavan alku- tai lopetusajan ja nukkuu siihen asti.

Ohjelman helppokäytöisyyden takia ei kannata tehdä ajatuksista liian monimutkaisia. Lähtisin siitä, että ajastuksella on alkuaika, viikonpäivät, joina se toistetaan sekä valittavat toiminnot. Lisäksi käyttäjä voisi valita alkuperäisen tilan palautuksen tietyn ajan kuluttua. Alkuperäinen tila kannattaa palauttaa vain siinä tapauksessa, ettei käyttäjä ole muuttanut asetusta käsin sitä ennen. Muut kuvailemasi toiminnot onnistuvat sillä, että tekee toisen ajastuksen. Aloitus- ja lopetuspäivämääristä voisi toki tehdä valinnaisia asetuksia, mutta en usko, että niille on juurikaan käyttöä.

Olen itse huomannut, että suunnitteluvaiheessa ohjelmasta tulee helposti sveitsiläinen linkkuveitsi, jonka toiminnoista vain osa on oikeasti tarpeellisia. Siksi toteuttaisin ohjelman aluksi kuvaukseni mukaisena ja myöhemmin käyttäjien palautteiden mukaan tarvittaessa lisäisin toimintoja.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta