您的位置:首页 > 移动开发 > Android开发

android上向主线程发消息时的一个常见错误

2015-07-21 17:26 537 查看
完整的报错信息是:

The specified message queue synchronization barrier token has not been posted or has already been removed.

我觉得一定有人搜索这句。

google翻译给出的结果是:指定的消息队列同步屏障令牌尚未发布或已经被删除。

感觉好像没什么用吗~~~

发生这个错误的一种情况是:在线程中向主线程发消息时使用的Message对象已经被发送过。

比如像这样给主线程发消息,发送第二个消息时就会报错,主线程能够收到并正确处理arg1=1000的那个消息(第一个消息)。

public void run(){
Message msg=new Message();
int count=0;
while (true){
try{
Thread.sleep(1000);
count=count+1000;
msg.arg1=count;
MainActivity.getInstance().getHandler().sendMessage(msg);
} catch (InterruptedException e){
e.printStackTrace();
}
}
}


原因就是msg被重用了。要解决很简单,每次发消息new一个新的就行,像这样:

public void run(){
Message msg=new Message();
int count=0;
while (true){
try{
Thread.sleep(1000);
count=count+1000;
////////////////////////////////////////////
msg=new Message();
///////////////////////////////////////////
msg.arg1=count;
MainActivity.getInstance().getHandler().sendMessage(msg);
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: