Visualizzazione stampabile
-
Rotazione screen
Sto implementando la funzione di rotazione dello screen.
La mia applicazione ha un'activity con un thread di background che apre una connessione HTTP per recuperare un file xml da visualizzare in una ListView, nella view principale viene mostrata una ProgressDialog nell'attesa.
Se apro il tastierino dopo aver recuperato i dati e averli visualizzati, salvo la struttura dati (arraylist) che contiene i dati xml parsati con onRetainNonConfigurationInstance(), l'activity viene distrutta e ricreata con getLastNonConfigurationInstance(). La cosa funziona.
Se invece apro il tastierino per passare in modalità landscape durante il "download", quindi con la progressdialog visualizzata, l'app crasha. La cosa credo abbia senso in quanto ad ogni rotazione viene distrutta l'activity e il thread che effettua la connessione remota muore.
La cosa che non mi torna è che a rigor di logica, la nuova activity dovrebbe chiamare la onCreate() che dovrebbe a suo volta far ripartire il download con un nuovo thread....
avete idee? :(
-
Secondo la documentazione di android (ma non ci ho ancora giocato :D), per un download è consigliabile implementare un thread che giri in background per fatti suoi e che quindi non sarà affetto da eventuali uccisioni dei suoi parenti :P
Potresti poi o impostare una callback sul padre, o semplicemente impostare un flag da salvare tra le preferenze del programma a download completato. Anche per questo, fammi sapere come funziona la cosa e se è semplice! :D
-
questo è quello che ho fatto e funziona infatti. Il thread gira in background. Nell'activity principale ho messo una Progressdialog per "intrattenere" l'utente e avvertirlo che è in corso il download, che viene effettuato in background dal thread. Quando il download termina, con una callback il padre viene avvisato, chiude la progressdialog e visualizza i contenuti etc...
il problema è un'altro :)
-
Ed infatti la cosa che non mi torna è che il thread non dovrebbe esser terminato con l'app in questione. Aspetta però, mi sono appena accorto di una cosa: potrebbe non esser richiamata affatto l'onCreate, quanto invece l'onResume (o onStart), e quindi per questo motivo potresti aver problemi!
Prova un secondo a dare un occhio a questo e prova a cambiare il codice in onCreate ed inserirne parte (quella che ti interessa per il thread) in onStart o onResume, e vedi se funziona :P
-
Quote:
Originariamente inviato da
bigalex
Ed infatti la cosa che non mi torna è che il thread non dovrebbe esser terminato con l'app in questione. Aspetta però, mi sono appena accorto di una cosa: potrebbe non esser richiamata affatto l'onCreate, quanto invece l'onResume (o onStart), e quindi per questo motivo potresti aver problemi!
Prova un secondo a dare un occhio
a questo e prova a cambiare il codice in onCreate ed inserirne parte (quella che ti interessa per il thread) in onStart o onResume, e vedi se funziona :P
ok, domani lo farò, ora sono troppo cotto ;)
grazie per le risposte, vi farò sapere.
-
Non preoccuparti, anzi, fammi sapere, visto che anche io a breve avrò questo problema (anche se contavo di usare anzichè un thread, magari un servizio che fosse richiamato ad ogni connessione via 3g o wifi, e vedere se sia il caso o meno di effettuare una ricerca di aggiornamenti).
Buonanotte ed a domani ;)
-
ho provato con onResume() e onStart() e non funziona. Facendo dei test con i Log di android, ho verificato che il thread non muore durante la rotazione, ma l'activity viene distrutta e ricreata dalla onCreate().
Per ora non ci sto levando le gambe.