Autore Topic: rendere più fluida e leggera una app  (Letto 261 volte)

Offline Trigun

  • Utente normale
  • ***
  • Post: 183
  • Respect: +4
    • Mostra profilo
rendere più fluida e leggera una app
« il: 15 Maggio 2015, 13:16:07 CEST »
0
salve
ho fatto un applicazione per me ...
ovvero ho creato un listino che mi permette di far il riordino di articoli ... l'app si presenta abbastanza semplicemente
una lista con il nome e alcuni dati e alla destra un -X+
+ e - son 2 pulsanti che vanno ad aumentare il valore sulla X
ora tutta la mia applicazione è fatta sfruttando un DB SEMPRE aperto (lo chiudo solo quando esco dall'app [on close/on destroy/ecc])
in questo modo ho pensato che avrei eliminato i tempi di apertura e chiusura ad ogni click del + o -
ora escludendo che ogni tanto crasha (principalmente durante le fasi iniziali tipo quando si spegne e si riaccende lo schermo velocemente.. forse ora che ho acquistato l'account per il google play riuscirò anche a debuggarlo dato che quando lo ho attaccato al pc non mi crasha mai e quindi non riesco a leggere il log) e credo dipenda proprio dal fatto che tipo mentre un processo chiude il db l'altro prova ad aprirlo... ora il problema è questo
l'app è 1 po' scattosa credo dipenda dal fatto che tutto il listino mi viene precaricato in memoria e viene creata una mappa di oggetti per ogni elemento e il tablet che uso non regge bene la quantità di dati (è un galaxy tab 10... il primo tablet uscito da 10'' e quindi è vecchiotto.. inizialmente aveva android 3.0 credo che se metto l'app sul mio note3 non mi da nessun problema) quindi la domanda è questa.. ci son modi per ottimizzare le cose?
tipo tenere il db aperto come faccio io è un vantaggio o uno svantaggio? è meglio che ad ogni click mi apri la connessione al db e la richiuda o come faccio attualmente avere una classe statica che mi punti alla variabile del db aperta e sfruttare la connessione aperta
avere tutta la mappa caricata all'apertura può creare problemi? sfruttare il lazy load da 1 parte sprecherebbe meno memoria ma dovrebbe ogni volta caricare le nuove righe quando vai a scorrere la lista... quindi credo rallenterebbe ancora di più...
attualmente l'app per aprirsi e caricare tutti i dati ci mette tipo 5-10 sec (saranno circa 200-300 linee di lista) e in realtà all'apertura effettua 2-3 volte la creazione della mappa ... quindi se debuggassi quella parte dovrei poter accorciarlo.. ma il problema non è tanto nell'apertura quanto nello scroll della lista che lagga e quando vado a premere sui bottoni...

TLDR
qual'e' il metodo ottimale per interagire con il db e maneggiare la lista?


l'alternativa a cui avevo pensato era di chiudere il db e quando si preme + o - al posto di caricare i dati sul db registrarli sulla variabile e usare un pulsante di salvataggio (o qualcosa di automatico?).. in questo modo ho il vantaggio che non fa la query ad ogni click.. ma lo svantaggio che se l'app si chiude o cose del genere prima di salvare perdo i dati inseriti...

Post unito: [time]15 Maggio 2015, 13:58:07 CEST[/time]
giusto per completezza
questo è come gestisco il db

Codice (Java): [Seleziona]
    public static MyDatabase getInstance() {
        if (database == null) {
            database = new MyDatabase();
        }

        return database;
    }

queste sono alcune chiamate esempio (la prima è all'interno della classe MyDatabase le altre 2 son all'esterno)
Codice (Java): [Seleziona]
                MyDatabase.getInstance().open();
                parseOfferta(text);
                MyDatabase.getInstance().close();
Codice (Java): [Seleziona]
                MyDatabase.getInstance().deleteOfferta(id);
Codice (Java): [Seleziona]
                this.groupList = MyDatabase.getInstance().getGroups();
« Ultima modifica: 15 Maggio 2015, 14:00:08 CEST da Trigun, Reason: Merged DoublePost »