2010-12-06 21 views
0

Pour vous donner un peu d'historique, j'essaie d'envoyer un objet non sérialisable (Spanned) du thread fils au thread principal (via Message). J'ai essayé l'évident - en le transformant en un tableau d'octets et en l'envoyant de cette façon, mais cela donne une erreur car il n'implémente pas de sérialisable.Passage d'un objet non sérialisable à un gestionnaire (du thread fils)

Y a-t-il un autre moyen de l'envoyer en utilisant un Bundle? Ou autre chose?

Voici comment j'envoie le message dans le fil de l'enfant

// message and bundle for the questions explanation 
Message qemsg = messageHandler.obtainMessage(); 

Bundle qeb = new Bundle(); 
qeb.putString("questionExplanations", questionExplanations); 

qemsg.setData(qeb); 
qemsg.arg1 = 0; 
messageHandler.sendMessage(qemsg); 

Voici le principal gestionnaire de threads (reçoit les messages envoyés par le fil de l'enfant):

private Handler messageHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
    CFAData cd = CFAData.getSingletonObject(); 
    Bundle summaryBundle = msg.getData(); 

    switch(msg.arg1) { 
     case 0: 
     // receives the bundle here and does what it needs on the UI thread 
     //testQuestionsExplanations.append(spannedExplanationsObj); 

     break; 
     default: 
     break; 
    } 
    } 
}; 
+0

Si vous avez deux threads en un seul processus, pourquoi ne pas simplement passer une référence ou un clone de l'objet à transférer entre les threads? – Robert

Répondre

4

Voici comment vous attachez des objets arbitraires à un message:

qemsg.obj = mySpanned; 
+0

Oh génial! Merci! – xil3