App utveckling

Diskussion i 'Frågor, support och diskussion' startad av spyx, 13 jun 2011.

  1. PatrikS

    PatrikS Senior Droid Medlem

    Blev medlem:
    29 jun 2009
    Inlägg:
    1 123
    Mottagna gillanden:
    65

    MINA ENHETER

    Var rekommenderar Dianne att man använder static och till vad?

    Det beror mycket på vad du använder ditt static-fält till, men så länge det ska representera ett tillstånd i ett objekt så ska det INTE vara static.
     
  2. nadam

    nadam Youth Droid Medlem

    Blev medlem:
    10 feb 2010
    Inlägg:
    182
    Mottagna gillanden:
    31
    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact

    MINA ENHETER

    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact
    Japp, definitionen av static-fält är ju att de tillhör själva klassen, inte de enskilda objekten.

    Här är några av de länkar där Dianne argumenterar för static-fält och i synnerhet i form av singletons.

    http://groups.google.com/group/android-developers/browse_frm/thread/f72178a1c52aa51
    http://stackoverflow.com/questions/3826905/singletons-vs-application-context-in-android
    http://groups.google.com/group/android-developers/browse_frm/thread/27b81ad24507f689

    "There is nothing intrinsically wrong with using singletons. Just use them correctly, when it makes sense."
     
  3. nadam

    nadam Youth Droid Medlem

    Blev medlem:
    10 feb 2010
    Inlägg:
    182
    Mottagna gillanden:
    31
    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact

    MINA ENHETER

    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact
    Skulle vara intressant att testa den appen eller ta en titt på koden. Det råkar inte vara open source?
     
  4. PatrikS

    PatrikS Senior Droid Medlem

    Blev medlem:
    29 jun 2009
    Inlägg:
    1 123
    Mottagna gillanden:
    65

    MINA ENHETER

    Singletons håller jag mig ifrån, anser att det tillhör gårdagen.

    "Singletons are Pathological Liars"


    http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/

    edit: nu ser jag att hon förordar att använda statics för hela applikationens status, det är en annan sak.
    Men still, det ställer till det rejält om man vill skapa testbara klasser.
     
  5. woody

    woody Teen Droid Medlem

    Blev medlem:
    3 sept 2009
    Inlägg:
    319
    Mottagna gillanden:
    19

    MINA ENHETER

    OT: (Då den här tråden ändå har spårat ut lite...)

    PatrikS, du verkar ju ha vettiga åsikter så jag passar på att fråga om din åsikt. (Andras åsikter är naturligtvis också välkommna)

    Jag tycker att enhetstester mestadels leder till duplicering av logik. Om klassen som ska testas är konstruerad enligt SOLID-principerna tycker jag sällan att enhetstester tillför något mervärde. Jag har aldrig varit med om att enhetstester upptäckt buggar i dessa klasser. Ändrar man på klassen finns det ju en anledning (logiken ska ändras eller att det funnits en bugg hela tiden (som enhetstesterna uppenbarligen missat)). Jag förespårkar därför att lägga energin på att skriva välstrukturerad kod i stället för att skriva enhetstester.

    Jag ser två fördelar med enhetstester:
    * De tvingar koden att bli nogoröunda strukturerad med beroendeinjicering o.s.v.
    * De gör att jag kan debugga min kod med hjälp av enhetstestverktyg utan att köra igång hela applikationen.
     
  6. nadam

    nadam Youth Droid Medlem

    Blev medlem:
    10 feb 2010
    Inlägg:
    182
    Mottagna gillanden:
    31
    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact

    MINA ENHETER

    Operatör:
    Hallon
    Telefon:
    Sony Xperia XZ1 Compact
    Bra exempel där på hur man inte ska använda singleton. Beroenden bör vara explicita vare sig man använder singleton eller inte.

    Inte bara för applikationens status. Även för delade resurser. Jag håller dock med om att det ställer till det för testbara klasser.

    Hur gör du själv i Android med global status och delade resurser om du inte använder singleton eller andra statics?
     
  7. Bureus

    Bureus Infant Droid Medlem

    Blev medlem:
    21 nov 2010
    Inlägg:
    13
    Mottagna gillanden:
    2

    MINA ENHETER

    Skulle rekommendera att antingen använda en SQLite database eller SharedPreferences. Strängar kan enkelt sparas i SharedPreferences. Dessutom finns ju JSON till hjälp, om det är flera värden du vill spara. Använder GSON och egen skapade Dtos för att sätta dessa. Annars skickar jag strängar med hjälp av putExtra och Bundlers samt Handlers.
     
  8. PatrikS

    PatrikS Senior Droid Medlem

    Blev medlem:
    29 jun 2009
    Inlägg:
    1 123
    Mottagna gillanden:
    65

    MINA ENHETER

    woody, det talar inte emot.. att använda enhetstester uppmuntrar till bra kod då man också gärna skriver tester som ska slå fel, krascha etc, det är just för förändringar (refactoring), som enhetstester kan vara bra för då de kan visa om objektens beteende har förändrats utöver det du önskar.
    Jag anser inte att det finns ett istället-förhållande mellan enhetstester och bra kod.

    Det vi förmodligen båda vänder oss emot med att en klass känner till och är beroende av en annan är att den är just det, beroende av den klassen.

    Jag tycker statiska anrop till den anropande klassen i princip är lika illa eller värre än de exempel på "self made"-programmerare som skickar in hela den anropande klassen i anropet så den anropade klassen kan hämta det den vill ha...

    Ett bra tips f.ö på DI är http://code.google.com/p/roboguice/ jag har haft ögonen på projektet men inte haft tid att implementera det än.
    Dock verkar det riktigt bra redan nu.

    Förresten S:et i SOLID verkar förespråka AOP-baserad loggning, fast därom tvistar de lärde... om loggning ska få vara med i en klass ansvar.
     
  9. mach

    mach Youth Droid Medlem

    Blev medlem:
    29 apr 2010
    Inlägg:
    115
    Mottagna gillanden:
    4

    MINA ENHETER

    Själv använder jag restriktivt vad jag sparar i Applikations. Ofta t.ex. stora listor som används på flera ställen som då kan laddas t.ex. under splash-skärmen.

    I ett (snart släppt) projekt så tar det över 2 sekunder att initiera data från JSON på en äldre telefon men bara 2 ms att hämta och ställa om callbacks när en aktivitet skall använda objektlistorna. 1:1000 i uppsnabbning alltså :)
     
  10. Thoast

    Thoast Youth Droid Medlem

    Blev medlem:
    21 jun 2010
    Inlägg:
    109
    Mottagna gillanden:
    17

    MINA ENHETER

    Är det nån som kan vara snäll och ge ett exempel på hur man sparar ett Int värde som ska gå att användas från en annan klass? Vet inte om det är jag som är trög eller bara för nybörjare, men jag får inte ihop det när jag läser från developer.android.com o_O

    jag vill att min int variabel ska heta people och ha värde 0

    vad blir fel i detta?

    SharedPreferences shared = this.getSharedPreferences("shared", MODE_WORLD_READABLE);
    SharedPreferences.Editor prefsEditor = shared.edit();
    abstract SharedPreferences.Editor.putint(people, 0);
    prefsEditor.commit();

    på 3e raden klagar den på att på att jag ska ta bort parenteserna
     
    Last edited: 29 jun 2011
  11. woody

    woody Teen Droid Medlem

    Blev medlem:
    3 sept 2009
    Inlägg:
    319
    Mottagna gillanden:
    19

    MINA ENHETER

    Kod:
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putInt("people", 0);
    editor.commit();
    
     
    Thoast gillar detta.
  12. Thoast

    Thoast Youth Droid Medlem

    Blev medlem:
    21 jun 2010
    Inlägg:
    109
    Mottagna gillanden:
    17

    MINA ENHETER

    Taack! Kom fram till exakt den koden nyss, men skrev den direkt under class deklarationen eller vad man kallar det ;)