Android – 将消息发送到死线程上的处理程序,Toa​​st错误

我正在使用C2DM服务,当我收到消息的时候,在显示Toast消息的时候,我也遇到了“将消息发送给死线程中的处理程序”的错误,在这里我想查看到达的消息。 使用代码:

@Override protected void onMessage(Context context, Intent intent) { Log.e("C2DM", "Message: arived"); Bundle extras = intent.getExtras(); if (extras != null) { //Toast.makeText(this.getApplicationContext(), (CharSequence) extras.get("payload"), Toast.LENGTH_LONG).show(); } } 

onMessage方法用于扩展C2DMBaseReceiver类。 吐司messatge永远不会显示。

这里有什么错误? 有没有灵魂?

编辑:

 09-06 08:59:02.135: WARN/MessageQueue(5654): Handler{44e65658} sending message to a Handler on a dead thread 09-06 08:59:02.135: WARN/MessageQueue(5654): java.lang.RuntimeException: Handler{44e65658} sending message to a Handler on a dead thread 09-06 08:59:02.135: WARN/MessageQueue(5654): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:179) 09-06 08:59:02.135: WARN/MessageQueue(5654): at android.os.Handler.sendMessageAtTime(Handler.java:457) 09-06 08:59:02.135: WARN/MessageQueue(5654): at android.os.Handler.sendMessageDelayed(Handler.java:430) 09-06 08:59:02.135: WARN/MessageQueue(5654): at android.os.Handler.post(Handler.java:248) 09-06 08:59:02.135: WARN/MessageQueue(5654): at android.widget.Toast$TN.hide(Toast.java:344) 09-06 08:59:02.135: WARN/MessageQueue(5654): at android.app.ITransientNotification$Stub.onTransact(ITransientNotification.java:55) 09-06 08:59:02.135: WARN/MessageQueue(5654): at android.os.Binder.execTransact(Binder.java:288) 09-06 08:59:02.135: WARN/MessageQueue(5654): at dalvik.system.NativeStart.run(Native Method) 

Solutions Collecting From Web of "Android – 将消息发送到死线程上的处理程序,Toa​​st错误"

有一个解决方法。 但是我无法使用该解决方法。

我通过在C2DMBaseReceiver构造函数中创build一个Handler来解决类似的问题,并添加了一个显示Toast的Runnable。

像这样的东西:

 public void showToast(String message, Context context){ handler.post(new DisplayToast(message, context)); } private class DisplayToast implements Runnable{ String mText; Context mContext; public DisplayToast(String text, Context context){ mText = text; mContext = context; } public void run(){ Toast.makeText(mContext, mText, Toast.LENGTH_LONG).show(); } 

然后你可以调用子类的DisplayToast方法。

希望它的作品!

请参阅http://code.google.com/p/android/issues/detail?id=20915 ,这可能是问题的根本原因。 它包括解决问题的方法。