Autore Topic: Aggiornamento Activity da background a foreground  (Letto 1188 volte)

Offline napalm

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
Aggiornamento Activity da background a foreground
« il: 03 Aprile 2013, 12:40:49 CEST »
0
Salve a tutti,
piccola domanda: io ho una mia piccola app che nell'oncreate della main activity chiama un AsyncTask che crea una connessione mysql, ora se il programma va in background e poi ritorna in foreground passa di nuovo nell'oncreate e ricrea la connessione ( faccia la verifica se la connessione è null crea se non nn fà nulla) io invece vorrei che verificasse se esiste la connessione e quindi non la ricreasse più perchè esistente.
Come posso fare?

Offline lorux

  • Utente junior
  • **
  • Post: 97
  • Respect: +12
    • Google+
    • lor.catalano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Sistema operativo:
    Windows
Re:Aggiornamento Activity da background a foreground
« Risposta #1 il: 03 Aprile 2013, 12:53:17 CEST »
0
dichiari  la connessione(il cursor?) a livello di classe,nell'oncreate controlli,se è nulla la inizializzi,se non è nulla non fai niente

Offline napalm

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
Re:Aggiornamento Activity da background a foreground
« Risposta #2 il: 03 Aprile 2013, 12:53:32 CEST »
0
ho provato ad aggiungere "android:launchMode="singleInstance"" nel manifest ma sembra sempre ricreare un'altra istanza della mia app invece che riprendere la vecchia ( clicco sull'icona della mia app per riportarla in foreground)

Post unito: 03 Aprile 2013, 12:56:09 CEST
dichiari  la connessione(il cursor?) a livello di classe,nell'oncreate controlli,se è nulla la inizializzi,se non è nulla non fai niente

yes

Codice (Java): [Seleziona]
if(CON == null){
                        Log.d("onCreate", "creo la connessione");
                        try {
                                CON = new CreaConnessioneTask().execute("").get();
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        } catch (ExecutionException e) {
                                e.printStackTrace();
                        }
                }else{
                        Log.d("onCreate", "connessione già creata");
                }

CON è a livello  di classe ma sembra proprio che quando rientro dal background crei un'altra istanza della mia activity e si troviano in parallelo; infatti se implemento un thread quando creo la connessione che stampa l'incremento di secondi quando ritorno dal background ne vedo 2 di stampe e così via

Post unito: 03 Aprile 2013, 13:06:48 CEST
è il back button, che chiude l'app ma lascia intatto il thread che continua a girare quindi cliccando sull'icona riparte un nuovo thread.
Ora, è possibile indicare un comando che quando clicco su back non mi chiuda l'app?
« Ultima modifica: 03 Aprile 2013, 13:06:48 CEST da napalm, Reason: Merged DoublePost »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aggiornamento Activity da background a foreground
« Risposta #3 il: 03 Aprile 2013, 13:42:38 CEST »
0
Salve a tutti,
piccola domanda: io ho una mia piccola app che nell'oncreate della main activity chiama un AsyncTask che crea una connessione mysql, ora se il programma va in background e poi ritorna in foreground passa di nuovo nell'oncreate e ricrea la connessione ( faccia la verifica se la connessione è null crea se non nn fà nulla) io invece vorrei che verificasse se esiste la connessione e quindi non la ricreasse più perchè esistente.
Come posso fare?

Per fare persistere la connessione, io memorizzerei il riferimento alla connessione stessa dentro l'estensione di Application (è uno dei modi per avere variabili globali a livello di applicazione, accessibili a tutte le activity).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline lorux

  • Utente junior
  • **
  • Post: 97
  • Respect: +12
    • Google+
    • lor.catalano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Sistema operativo:
    Windows
Re:Aggiornamento Activity da background a foreground
« Risposta #4 il: 03 Aprile 2013, 14:27:15 CEST »
0
prima di tutto,se usi .get() sull'asynctask ti perdi il senso dell'async,visto che lì rimane in attesa che la task finisca

di solito per salvare lo stato di un activity si reimplementa l'onSaveInstanceState,ma non puoi inserire nel bundle oggetti alla cazzo,devono essere serializable o parcelable,e non penso proprio che una connection lo sia.

quindi la cosa esatta che vuoi fare te non si può fare così.E' proprio necessario mantenere la connessione?
al massimo potresti usare un service che ti gestisca la connessione e lo usi nell'activity,ma non ne sò più di così,non me ne intendo di service e non so quanto e come rimane attivo in background quando l'app è in background.


Per fare persistere la connessione, io memorizzerei il riferimento alla connessione stessa dentro l'estensione di Application (è uno dei modi per avere variabili globali a livello di applicazione, accessibili a tutte le activity).
funziona sempre? boh secondo me se uno continua a fare back l'app viene chiusa come se si chiudesse dal task manager quindi anche le cose salvate  nell'app si perdono..
vabbè prova e facci sapere
« Ultima modifica: 03 Aprile 2013, 14:31:26 CEST da lorux »

Offline napalm

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
Re:Aggiornamento Activity da background a foreground
« Risposta #5 il: 03 Aprile 2013, 14:39:10 CEST »
0
prima di tutto,se usi .get() sull'asynctask ti perdi il senso dell'async,visto che lì rimane in attesa che la task finisca

ho usato asynctask perchè le connessioni non si possono aprire nel mainthread ma devo essere aperte altrove.
Il fatto che il main debba aspettare la creazione della connessione non mi crea problemi anche perchè è istantaneo (sotto lan) quindi non dovrebbe essere un problema.

Cmq, volendo modificare ciò dovrei far partire un "service" che in qualche modo ritorni al main la connessione creata no?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aggiornamento Activity da background a foreground
« Risposta #6 il: 03 Aprile 2013, 16:26:23 CEST »
0
funziona sempre? boh secondo me se uno continua a fare back l'app viene chiusa come se si chiudesse dal task manager quindi anche le cose salvate  nell'app si perdono..
vabbè prova e facci sapere

Sui device fisici in cui ho provato personalmente, anche dopo la chiusura dell'app (ma sarebbe meglio dire la chiusura di tutte le activity dell'app), l'oggetto Application di una data app persiste per quasi un'oretta. Credo dipenda moltissimo da come viene usato il terminale per cui ad un certo punto il sistema operativo distrugge tutto e libera la memoria. In ogni caso, al momento in cui il sistema decide di distruggere tutto, è perchè non viene usato da un bel po', per cui non dovrebbe essere un problema.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline lorux

  • Utente junior
  • **
  • Post: 97
  • Respect: +12
    • Google+
    • lor.catalano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Sistema operativo:
    Windows
Re:Aggiornamento Activity da background a foreground
« Risposta #7 il: 03 Aprile 2013, 17:57:34 CEST »
0
ho usato asynctask perchè le connessioni non si possono aprire nel mainthread ma devo essere aperte altrove.
Il fatto che il main debba aspettare la creazione della connessione non mi crea problemi anche perchè è istantaneo (sotto lan) quindi non dovrebbe essere un problema.

Cmq, volendo modificare ciò dovrei far partire un "service" che in qualche modo ritorni al main la connessione creata no?
L'asynctask va bene usarla ma non devi chiamare il get(), l'execute fa già il lavoro che hai nel doinbackground, nella tua task devi implementare il metodo onpostexecute dove finire e assegnare la connessione..

Per quanto riguarda i service non mi esprimo ulteriormente perché non li ho ancora mai provati, magari stasera provo a implementarne uno :p

Offline napalm

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
Re:Aggiornamento Activity da background a foreground
« Risposta #8 il: 04 Aprile 2013, 09:09:20 CEST »
0
L'asynctask va bene usarla ma non devi chiamare il get(), l'execute fa già il lavoro che hai nel doinbackground, nella tua task devi implementare il metodo onpostexecute dove finire e assegnare la connessione..

capito, però a questo punto devo passare al mio asynctask il riferimento dell'activity perché poi nel onpostexecute  dovrò passare l'oggetto connessione appunto all'activity  no?