因此,大多数问题都在标题中。
我已经在GCMIntentService中设置了所有功能,以便在一个函数中进行sendbroadcast(intent)。但是,当我尝试在另一线程中执行此操作时,出现此错误“将消息发送到死线程上的处理程序”。代码是完全一样的,对一个人而言是完美的,而对于其他任何想法都完美吗?
@Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received message");
final String message = intent.getExtras().getString("clicked");
if(message == null)
Toast.makeText(context, getResources().getString(R.string.message_null), Toast.LENGTH_SHORT).show();
else if(message.split("\\|")[0].equals("updateMessageInvisible")) {
onReceiveUpdateMessageInvisible(message);
} else if(message.split("\\|")[0].equals("message")) {
onReceiveMessage(message);
}
}
这个很好用。
private void onReceiveMessage(String message) {
//Stuff happening (accessing database mostly)
//Notify listView of Message that it has new data
Intent i = new Intent("com.crisis.app.NEW_MESSAGE");
sendBroadcast(i);
}
这是行不通的。
private void onReceiveUpdateMessageInvisible(String message) {
//Stuff happening (accessing database again)
//Notify listView of Message that data has been updated
Intent i = new Intent("com.crisis.app.UPDATE_MESSAGE");
sendBroadcast(i);
}
我的广播接收器课程:
public final class ReceiveMessage extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
System.out.println("NOTIFY DATA CHANGED");
//Stuff happening
//Set adapter with array of message
adapter = new MessageRowAdapter(context, values);
listview.setAdapter(adapter);
}
}
当然,我在onPause和onResume中注册和注销。
因此,如果有人知道为什么它可以在一种情况下起作用,而在没有区别的情况下却不能在另一种情况下起作用……
也许您只能在一个Intent中进行一个senBroadcast?
提前致谢 !
编辑:添加了GCMIntentService的onMessage函数
最佳答案
解决了我的问题。
这是因为我在UIThread之外调用Toast。
Asynctask没有解决它,您必须使用:
new Thread() {
public void run() {
mainActivity.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(context, getResources().getString(R.string.message_null), Toast.LENGTH_SHORT).show();
}
});
}
}.start();