Autore Topic: Pausa di un Thread al click del tasto Home  (Letto 765 volte)

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Pausa di un Thread al click del tasto Home
« il: 11 Febbraio 2012, 19:51:38 CET »
0
Salve gente,

Mi faccio sentire per porvi il seguente problema.

Ho preso come esempio per lavorare con la SurfaceView quello postato da Ricky in qualche altro post, (questo http://www.droidnova.com/playing-with-graphics-in-android-part-iii,176.html ) ma vorrei risolvere il problema della pressione del tasto Home, in quanto se premuto per mantenere in background l'attività il Thread ad essa associato rimane attivo, e di conseguenza al ritocco dell'icona dell'applicazione si riceve il seguente errore da LogCat:

Codice: [Seleziona]
02-11 18:47:10.037: W/dalvikvm(12705): threadid=1: thread exiting with uncaught exception (group=0x4001d7d0)
02-11 18:47:10.065: E/AndroidRuntime(12705): FATAL EXCEPTION: main
02-11 18:47:10.065: E/AndroidRuntime(12705): java.lang.IllegalThreadStateException: Thread already started.
02-11 18:47:10.065: E/AndroidRuntime(12705):         at java.lang.Thread.start(Thread.java:1322)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at com.prova.Tutorial2D$Panel.surfaceCreated(Tutorial2D.java:122)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at android.view.SurfaceView.updateWindow(SurfaceView.java:532)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:206)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at android.view.View.dispatchWindowVisibilityChanged(View.java:3891)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:719)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at android.view.ViewGroup.dispatchWindowVisibilityChanged(ViewGroup.java:719)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at android.view.ViewRoot.performTraversals(ViewRoot.java:753)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at android.view.ViewRoot.handleMessage(ViewRoot.java:1749)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at android.os.Handler.dispatchMessage(Handler.java:99)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at android.os.Looper.loop(Looper.java:123)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at android.app.ActivityThread.main(ActivityThread.java:4627)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at java.lang.reflect.Method.invokeNative(Native Method)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at java.lang.reflect.Method.invoke(Method.java:521)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
02-11 18:47:10.065: E/AndroidRuntime(12705):         at dalvik.system.NativeStart.main(Native Method)

E' chiaro che andrebbe messo in pausa il thread e riavviato nel momento in cui rientro nell'applicazione. Qualcuno saprebbe propormi una possibile soluzione al problema?

Grazie immensamente  :-)
« Ultima modifica: 11 Febbraio 2012, 20:53:36 CET da Auron »
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Pausa di un Thread al click del tasto Home
« Risposta #1 il: 12 Febbraio 2012, 12:21:52 CET »
0
Ho risolto così:

Codice (Java): [Seleziona]
@Override
        public void surfaceCreated(SurfaceHolder holder) {
                if (!_thread.isAlive()) {
                        _thread = new TutorialThread(getHolder(), this);
                        _thread.setRunning(true);
                        _thread.start();
                }
        }

Grazie comunque. Ciao a tutti
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Pausa di un Thread al click del tasto Home
« Risposta #2 il: 12 Febbraio 2012, 13:26:16 CET »
0
Scusa se mi intrometto ma ti sconsiglio questa soluzione.
Il problema è se il tuo thread continua a girare questo non solo consuma batteria ma a seconda di quello che fai nella onDraw potresti avere risultati sgraditi.

La soluzione corretta secondo me dovrebbe essere quella di usare il codice che fa il .join() del thread (quello che c'è nella surfacedestroyed al link che hai messo) e gestirti la onPause/onResume di conseguenza...
« Ultima modifica: 12 Febbraio 2012, 14:13:52 CET da undead »

Offline Auron

  • Utente junior
  • **
  • Post: 104
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Motorola Milestone Android 2.2.1
  • Sistema operativo:
    Windows
Re:Pausa di un Thread al click del tasto Home
« Risposta #3 il: 12 Febbraio 2012, 14:15:39 CET »
0
Ma guarda che la mia surfaceDestroyed è proprio come dici tu eh

Codice (Java): [Seleziona]
public void surfaceDestroyed(SurfaceHolder holder) {
            boolean retry = true;
            _thread.setRunning(false);
            while (retry) {
                try {
                    _thread.join();
                    retry = false;
                } catch (InterruptedException e) {
                }
            }
        }

Non mi pare ci siano consumi di batteria avendo implementato questa soluzione e non mi pare rimanga in esecuzione il thread
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;-)

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Pausa di un Thread al click del tasto Home
« Risposta #4 il: 12 Febbraio 2012, 14:35:13 CET »
0
Hai ragione, scusa!  Ho letto nel primo messaggio: "il thread rimane attivo" e pensavo che il problema fosse che il thread continuava a girare. ;-)