CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: gianpassa con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 10 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 10 su 10
Discussione:

Problema rotazione schermo, onSaveInstanceState ?

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    18

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Unhappy

    Problema rotazione schermo, onSaveInstanceState ?

    Salve a tutti,
    Ho un problema che fatico a risolvere,

    Il quadro generale:
    ho un'activity che gestisce la fotocamera, mostra la preview e permette di scattare una foto. Questa activity ha anche un handler come variabile d'istanza.
    Quando l'utente scatta una foto (la preview si ferma) l'activity fa comparire una progressbar (ProgressDialog) e intanto manda tale foto ad un thread che si mette a fare calcoli su calcoli, quando il thread ha finito il suo lavoro manda un messaggio all'handler dell'activity ( tramite sendMessage(Message msg) ) il quale invoca dismiss() sulla progressbar e fa terminare l'activity con esito positivo o meno rispetto ai calcoli.

    Il tutto funziona senza problemi... finché non si ruota lo schermo (dopo aver scattato la foto)
    Appena si ruota lo schermo, se ho ben capito, viene chiamato nuovamente l'onCreate dell'activity, qui iniziano i disastri:
    la progressbar sparisce, rinizia la preview della fotocamera ed infine la mia applicazione viene drasticamente killata quando il thread cerca di mandare il messaggio all'handler.

    Quindi ho svariate domande a riguardo:

    1) quando si ruota lo schermo tutte le variabili d'istanza vengono resettate?

    2) dovrei dunque salvarmi l'handler, la progressbar e la camera?

    3) ho visto che il metodo onSaveInstanceState serve appunto per salvare lo stato, ma guardando cosa può essere messo nel Bundle tramite i metodi put[...] non ho trovato niente che prendesse Object, solo tipi primitivi e stringhe, come posso fare?

    Grazie.

  2.  
  3. #2
    Androidiano


    Registrato dal
    Apr 2009
    Messaggi
    163

    Ringraziamenti
    2
    Ringraziato 8 volte in 8 Posts
    Predefinito

    potresti nel Manifest.xml dell'applicazione aggiungere nella parte riguardante la tua activity questo android:configChanges="orientation" e vedere se il problema si risolve anche se non ne sono molto convinto

  4. #3
    Senior Droid


    Registrato dal
    Dec 2009
    Messaggi
    307

    Ringraziamenti
    15
    Ringraziato 40 volte in 39 Posts
    Predefinito

    Oppure bloccare del tutto la rotazione se non ti serve supportare sia la modalità portrait che landscape.

  5. #4
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    18

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da blaster Visualizza il messaggio
    potresti nel Manifest.xml dell'applicazione aggiungere nella parte riguardante la tua activity questo android:configChanges="orientation" e vedere se il problema si risolve anche se non ne sono molto convinto
    non risolve, avevo già provato ma il risultato è: la progressbar si rimane, ma sotto di lei la preview della fotocamera ritorna a partire...

    Quote Originariamente inviato da Orochi
    Oppure bloccare del tutto la rotazione se non ti serve supportare sia la modalità portrait che landscape.
    Si può bloccare la rotazione come hai indicato tu ma solo nel momento in cui l'utente scatta la foto? Mi spiego meglio, posso decidere quando bloccarla e quando no?
    EDIT: o il blocco della rotazione solo per una certa activity
    Ultima modifica di Blacksmith; 17-10-10 alle 12:57

  6. #5
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    18

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    ho guardato come bloccare lo schermo, ad esempio aggiungendo alle proprietà dell'activity nel manifest 'android:screenOrientation="portrait" ' ma questo non risolve il problema, lo schermo è vero che non ruota ma l'activity viene cmq ricreata... con gli stessi problemi precedenti.

  7. #6
    Androidiano


    Registrato dal
    Apr 2009
    Messaggi
    163

    Ringraziamenti
    2
    Ringraziato 8 volte in 8 Posts
    Predefinito

    non so se sto dicendo una bestialità ma hai provato a combinare le due cose?
    Ultima modifica di blaster; 17-10-10 alle 13:12

  8. #7
    Androidiano L'avatar di DarthSith


    Registrato dal
    Jan 2010
    Messaggi
    256

    Ringraziamenti
    1
    Ringraziato 14 volte in 14 Posts
    Predefinito

    Nelle mie ho usato il tag da te citato, android:screenOrientation, e non riparte l'oncreate.
    Cmq sarebbe utile capire qual'è il giusto approccio.

  9. #8
    Senior Droid


    Registrato dal
    Dec 2009
    Messaggi
    307

    Ringraziamenti
    15
    Ringraziato 40 volte in 39 Posts
    Predefinito

    Che io sappia il giusto approccio dovrebbe essere usare l'attributo android:screenOrientation, e quando l'ho provato io non passava una seconda volta dalla onCreate, ovvero non distruggeva l'activity quando ruotavo il cell

  10. #9
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    18

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    non saprei... ho messo dei Log.d per sull'onCreate per vedere quando lo chiamava, e anche con quel parametro si aveva problemi con l'unica differenza che la progressbar continuava ad essere in bella vista e non svaniva nel nulla...

    Cmq dopo svariate ricerche ho trovato questo "tutorial":
    Threads and Progress Dialogs in Android Screen Orientation Rotations

    riprende il problema in questione e per salvare il riferimento al thread e compagnia cantante usa i metodi onRetainNonConfigurationInstance() e getLastNonConfigurationInstance() grazie ai quali riesce a tenere "in vita" veri e proprio oggetti. Nel momento in cui scrivo sto riadattando il mio codice per vedere se effettivamente funziona come dice intanto ho pensato di postarlo, magari può essere utile o cmq può essere la soluzione più vicina a quella "corretta", insomma può sempre essere di aiuto.

    Se poi funziona anche nel mio caso sicuramente ve lo farò sapere
    Voi che ne pensate?

  11. #10
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    18

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    ragazzi ho risolto come descritto nell'articolo postato sopra, ovviamente il mio codice è diverso ma la base è stata un'ottima, penso dunque che l'utilizzo dei metodi onRetainNonConfigurationInstance() e getLastNonConfigurationInstance() unito ad una buona programmazione sia un'ottima soluzione al problema.

    Devo finire di gestire il fatto della preview ma almeno la coppia Thread-progressbar è ok.

    Si può editare il titolo del post? magari per aiutare ricerche future
    Ultima modifica di Blacksmith; 17-10-10 alle 17:30

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy