2011-09-06 54 views
8

我正在使用C2DM服務,當我收到消息時,在顯示Toast消息時,還收到「向死線程上的處理程序發送消息」錯誤,其中我想看看到達的消息。使用代碼:Android - 將消息發送到死線程上的處理程序,Toa​​st錯誤

@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) 
+0

我有同樣的問題,你有沒有想出一個解決方案? – ToddH

+0

我已經從Toast消息轉移到通知欄顯示消息,我從服務器獲得。我無法將它作爲吐司。目標是在您的應用和承包商中謹慎使用上下文 – Waypoint

回答

5

有一種解決方法。不過,我無法使用該解決方法。

我通過在C2DMBaseReceiver構造函數中創建一個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。

希望它的作品!

+1

+1另一種解決方法對我無效。這工作。 – Ixx

+0

解決了類似的問題,通過WindowManager添加視圖觸發傳入的EventBus消息。 – lifelogger

相關問題