Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Android - Come mantenere attiva una AsyncTask dopo un changeOrientation
Forum - Android - Come mantenere attiva una AsyncTask dopo un changeOrientation

Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 11:59
Mercoledì, 03/12/2014
Avevo fatto tanto bene un'applicazione che usa una socket in un asyncTask;
però poi mi sono accorto che va tutto a farsi benedire nel momento in cui
ruoto lo schermo :(
So gia che onSave\onRestore InstanceState non sono di aiuto :(
Mi stavo documentando sui servizi, solo che sto avendo difficoltà a capirli appieno :(

Allora volevo chiedervi: per risolvere il mio problema (mantenere la mia AsyncTastk attiva
e quindi anche la connessione con la socket attiva) sono obbligato ad usare i Servizi?
O me la posso cavare in un modo più semplice?
E nel caso dovessi usare i servizi, quale tra i diecimila tipi che ci sono?
Io so che in teoria i BoundService nel mio caso non vanno bene perchè sono "connessi" con lo stato del client (activity),
quindi quando ruoto lo schermo (ruotando in teoria l'activity va in Stop->Destroy->Create) anche il servizio viene prima
interrotto (connessione persa) poi ricreato (nuova connessione) che non va bene.

Vi prego ditemi che c'è un altra soluzione :hail:
(oltre alla "falsa soluzione" di impedire lo rotazione dello schermo)

Please help me :)

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 18:30
Mercoledì, 03/12/2014
Non riesco a capire perchè la rotazione dovrebbe interrompere la tua AsyncTask... posta il codice?


Il mio blog: https://piero.dev
PM Quote
Avatar
Dice (Normal User)
Expert


Messaggi: 238
Iscritto: 26/11/2011

Segnala al moderatore
Postato alle 9:58
Giovedì, 04/12/2014
Ok, penso di aver detto una cosa sbagliata :(
Facendo un po di debug ho visto che anche dopo la rotazione la mia AsyncTask è sempre in stato RUNNING; però mi sono accorto di qual è il mio vero problema: dopo la rotazione la mia Socket si disconnette (nella AsyncTask uso una socket per connettermi a un server). E' una normalissima socket che si connette ad un IP e PORTA con un server; quindi visto che con la rotazione la mia socket client si disconnette, viene a mancare la comunicazione con il server.
Quali sono le possibili soluzioni per risolvere il mio problema?
Ho letto su internet che potrei usare i Fragment o i Service.
Ma non c'è un modo più semplice?
Nel caso dovessi usare i Service, mi puoi consigliare quale tipo di Service mi conviene usare?
In teoria i BoundService non vanno bene perchè sono "connessi" con il ciclo di vita dell'Activity, quindi visto che con la rotazione si ha onDestroy e onCreate, anche il servizione andrà in questi due stati.
E poi un altro problema insorge: se dovessi usare un servizio per mantenere attiva la mia socket, nel servizio ci devo andare a mettere tutta la mia AsyncTask, oppure ci devo mettere solo la creazione dell'istanza della socket?
Perchè se ci devo mettere tutta l'asyncTask dentro al servizio, dopo devo occuparmi anche del problema di mandare i messaggi dal servizio all'activity per mostrare i messaggi all'utente (dovrei usare Intent/Messenger/broadcastreceiver) e la cosa si complica troppo per i miei gusti :(
Quindi di nuovo: come mi consigli di agire?

Ultima modifica effettuata da Dice il 04/12/2014 alle 10:14
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 15:38
Giovedì, 04/12/2014
Prima di inviare/ricevere dati alla socket, controlla che la connessione sia attiva. Se non e' attiva, riconnetti.

Essendo un dispositivo mobile dove la connessione ad internet può interrompersi in qualsiasi momento, questo genere di logica è necessario.


Il mio blog: https://piero.dev
PM Quote