Autore Topic: Problemi con threadid=3 reacting to signal 3  (Letto 1039 volte)

Offline andrea_g

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • andreagorfer
    • @andreagorfer
    • Mostra profilo
    • Bondon's Crew
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Max OS X 10.9.2
Problemi con threadid=3 reacting to signal 3
« il: 19 Agosto 2013, 15:44:33 CEST »
0
Ciao a tutti, sono alle prese con un'app che instaura una connessione TCP client e scambia stringhe di messaggi con un server remoto. Il compito di quest'app è entrare in un'activity dove viene attivato il wi-fi con il messaggio di benvenuto relativo e si passa all'activity successiva. All'avvio della seconda activity viene instaurata la connessione TCPClient con il server in questione e, una volta iniziato l'inputstream, mando la prima stringa. Le successive le mando tramite dei pulsanti. Il problema è che dopo un po' di tempo l'app non risponde più per una trentina di secondi e, quando il telefono si sblocca, appare il messaggio di terminare l'app.
Sul LogCat appaiono le seguenti scritte:

08-19 13:50:38.660: I/dalvikvm(12748): threadid=3: reacting to signal 3

08-19 13:50:38.695: I/dalvikvm(12748): Wrote stack traces to '/data/anr/traces.txt'

Cosa può essere?

Post unito: 19 Agosto 2013, 21:11:32 CEST
La soluzione potrebbe essere l'uso dei Thread?
« Ultima modifica: 19 Agosto 2013, 21:23:44 CEST da andrea_g, Reason: Merged DoublePost »
Andrea

Offline matttt

Re:Problemi con threadid=3 reacting to signal 3
« Risposta #1 il: 20 Agosto 2013, 21:23:46 CEST »
0
L'accesso alla rete conviene sia sempre fatto su un altro Thread altrimenti rischi che ti si pianti il thread principale / l'UI / l'app
La rete a volte ha ritardi, magari rallentamenti dovuti a qualche pacchetto sbagliato, a perdite di segnale, a rallentamenti esterni nella rete, etc.
Le mie apps su Google Play Store:

Offline andrea_g

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • andreagorfer
    • @andreagorfer
    • Mostra profilo
    • Bondon's Crew
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Max OS X 10.9.2
Re:Problemi con threadid=3 reacting to signal 3
« Risposta #2 il: 20 Agosto 2013, 21:26:33 CEST »
0
La connessione TCP si svolge, ovviamente, su un AsyncTask mentre i pacchetti vengono spediti, e si attende la risposta, sul thread principale. Meglio fare un'app multithreading?
Andrea

Offline matttt

Re:Problemi con threadid=3 reacting to signal 3
« Risposta #3 il: 20 Agosto 2013, 21:33:46 CEST »
0
Dalla documentazione di AsyncTask:
Citazione
AsyncTasks should ideally be used for short operations (a few seconds at the most.)

Qualsiasi funzione di lettura/scrittura via rete nel thread principale ha una dose di rischio (in termini di ritardi e rallentamenti) a mio avviso, non è solo la connessione iniziale.
Fossi in te farei tutta la parte di comunicazione di rete su un thread a parte e poi userei delle funzioni di comunicazione inter-processo per comunicare col thread principale.
Le mie apps su Google Play Store:

Offline andrea_g

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • andreagorfer
    • @andreagorfer
    • Mostra profilo
    • Bondon's Crew
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Max OS X 10.9.2
Re:Problemi con threadid=3 reacting to signal 3
« Risposta #4 il: 20 Agosto 2013, 21:37:25 CEST »
0
Come pensavo. Ma la connessione la tengo sempre attiva, tramite Asynctask e al click dei button spedisco questi pacchetti.
Ora, io la connessione la tengo così e poi, al click del button, richiamo il thread per mandare il messaggio, attendere la risposta e settarla sulla UI?
Andrea

Offline matttt

Re:Problemi con threadid=3 reacting to signal 3
« Risposta #5 il: 20 Agosto 2013, 21:47:59 CEST »
+1
Mi sembra più complicato avere sia un AsyncTask che un thread...
Non conosco la tua app in dettaglio ma forse potresti pensare di realizzare un servizio per la parte di rete:
Services | Android Developers
Le mie apps su Google Play Store:

Offline andrea_g

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • andreagorfer
    • @andreagorfer
    • Mostra profilo
    • Bondon's Crew
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Max OS X 10.9.2
Re:Problemi con threadid=3 reacting to signal 3
« Risposta #6 il: 20 Agosto 2013, 21:54:00 CEST »
0
La mia app te la descrivo in breve: si avvia ed instanzia una connessione TCP Client con un modulino wi-fi. All'avvio c'è da premere un pulsante per passare dall'activity di benvenuto a quella "operativa". Appena entro in quella operativa e l'inputstream è stabilito, mando un messaggio a questa centralina per capire quale utenze ci sono attive (esempio luci, multimedia, pompa dell'acqua,...). Da questo dato io posso accendere o spegnere delle utenze in base a cosa c'è di attivo. Quindi ogni volta che mando un pacchetto(premo un'imagebutton che cambia ad ogni click) prima mando una richiesta per capire cosa è attivo ed in base alla risposta della centralina mando un messaggio ben specifico tra un set predefinito.
Andrea

Offline matttt

Re:Problemi con threadid=3 reacting to signal 3
« Risposta #7 il: 20 Agosto 2013, 22:05:31 CEST »
0
Un'app di domotica insomma :D
Considera il discorso che ti scrivevo prima del Servizio, potrebbe fare al caso tuo.
Un'altra possibilità (ma li dipende dalle centraline / dispositivi con cui lavori) potrebbe essere di lavorare con HTTP invece di TCP e quindi fare delle semplici richieste web (magari XML / Json) per le azioni da invocare mentre in polling ogni tot secondi (tipo 5 -10) scaricare delle informazioni di stato dei dispositivi sempre via web (sempre in XML / Json). Butto li delle idee eh... io almeno proverei così se dovessi fare un'app di questo tipo, poi non so se funzionerebbe meglio di avere sempre una connessione TCP su.
Le mie apps su Google Play Store:

Offline andrea_g

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • andreagorfer
    • @andreagorfer
    • Mostra profilo
    • Bondon's Crew
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Max OS X 10.9.2
Re:Problemi con threadid=3 reacting to signal 3
« Risposta #8 il: 20 Agosto 2013, 22:13:36 CEST »
0
Esatto un app di domotica che però, per specifiche progettuali, è da svolgersi con connessione TCP-IP poiché il modulino wi-fi non sfrutta internet ma è nato appositamente per questo tipo di comunicazione.    o_O
Provo a valutare il discorso del Service poi ti farò sapere. Intanto grazie mille  :D
Andrea