Autore Topic: Problemi nell'invio di messaggi da service ad Activity  (Letto 978 volte)

Offline SoreX

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic
  • Sistema operativo:
    Ubuntu 10.04
Problemi nell'invio di messaggi da service ad Activity
« il: 24 Febbraio 2013, 12:34:48 CET »
0
Ho un problema con l'invio di messaggi da un service ad un activity .. io ho la necessità che il mio service comunichi con diverse activity di volta in volta, e per farlo
ho utilizzato questo esempio
  Android Example: Communication between Activity and Service using Messaging - Yet another web log
e funziona come promette.
Il mio problema è che a volte (non ho ancora capito ina base a quale criterio) mi viene lanciata un eccezione fatale col messaggio "Message already in use ".
Il logcat è il seguente :

02-24 12:25:48.500: E/AndroidRuntime(18085): FATAL EXCEPTION: main
02-24 12:25:48.500: E/AndroidRuntime(18085): java.lang.RuntimeException: Main thread loop unexpectedly exited
02-24 12:25:48.500: E/AndroidRuntime(18085):    at android.app.ActivityThread.main(ActivityThread.java:4465)
02-24 12:25:48.500: E/AndroidRuntime(18085):    at java.lang.reflect.Method.invokeNative(Native Method)
02-24 12:25:48.500: E/AndroidRuntime(18085):    at java.lang.reflect.Method.invoke(Method.java:511)
02-24 12:25:48.500: E/AndroidRuntime(18085):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:762)
02-24 12:25:48.500: E/AndroidRuntime(18085):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:529)
02-24 12:25:48.500: E/AndroidRuntime(18085):    at dalvik.system.NativeStart.main(Native Method)
02-24 12:25:48.550: E/JavaBinder(18085): *** Uncaught remote exception!  (Exceptions are not yet supported across processes.)
02-24 12:25:48.550: E/JavaBinder(18085): android.util.AndroidRuntimeException: { what=102 when=-2h42m52s64ms obj=android.os.BinderProxy@41819f08 } This message is already in use.
02-24 12:25:48.550: E/JavaBinder(18085):    at android.os.MessageQueue.enqueueMessage(MessageQueue.java:187)
02-24 12:25:48.550: E/JavaBinder(18085):    at android.os.Handler.sendMessageAtTime(Handler.java:473)
02-24 12:25:48.550: E/JavaBinder(18085):    at android.os.Handler.sendMessageDelayed(Handler.java:446)
02-24 12:25:48.550: E/JavaBinder(18085):    at android.os.Handler.sendMessage(Handler.java:383)
02-24 12:25:48.550: E/JavaBinder(18085):    at android.app.ActivityThread.queueOrSendMessage(ActivityThread.java:1835)
02-24 12:25:48.550: E/JavaBinder(18085):    at android.app.ActivityThread.access$200(ActivityThread.java:123)
02-24 12:25:48.550: E/JavaBinder(18085):    at android.app.ActivityThread$ApplicationThread.schedulePauseActivity(ActivityThread.java:506)
02-24 12:25:48.550: E/JavaBinder(18085):    at android.app.ApplicationThreadNative.onTransact(ApplicationThreadNative.java:78)
02-24 12:25:48.550: E/JavaBinder(18085):    at android.os.Binder.execTransact(Binder.java:338)
02-24 12:25:48.550: E/JavaBinder(18085):    at dalvik.system.NativeStart.run(Native Method)




Io però ad ogni invio di un message faccio Message.obtain (null, what), con what che è un intero statico che viene di volta in volta incrementato, quindi è sempre diverso ..
Ho provato a mettere nell'handler removeMessages(what) ma non cambia niente ..
Qualcuno sa darmi qualche indizio riguardo ad un errore del genere ?

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Problemi nell'invio di messaggi da service ad Activity
« Risposta #1 il: 24 Febbraio 2013, 20:50:38 CET »
0
Non ho analizzato tutto il codice, ma mi sembra che si possano usare soluzioni meno articolate e più pulite.
Innanzitutto puoi utilizzare dei broadcast receiver che vengono registrati nell'activity nell'onResume (ricordati di togliere al registrazione nel onPause).
Il service lancia un intent broadcast che viene ricevuto dall'activity. In questo modo solo l'activity attiva riceverà il messaggio.

Se l'interazione è molto forte, forse un service non è l'opzione migliore, valuta un asyncTask.

Ultima cosa, nel service ho visto che c'è un Timer. Scelta da evitare, molto meglio utilizzare l'AlarmManager.

Offline SoreX

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic
  • Sistema operativo:
    Ubuntu 10.04
Re:Problemi nell'invio di messaggi da service ad Activity
« Risposta #2 il: 24 Febbraio 2013, 21:01:39 CET »
0
Si alla fine ho ripiegato sui BroadCast Receiver, però volevo capire il perchè non funzionava l'invio dei messaggi.. cioè in realtà funziona a tratti, è quella la cosa strana.. senza apparente motivi lancia l'eccezione, quando il metodo chiamato per inviare il messaggio, e quindi tutta la procedura di creazione e invio messaggio è sempre la stessa..