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

来源:互联网 发布:桃源网络硬盘破解 编辑:程序博客网 时间:2024/05/29 19:21

完整的报错信息是:

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();}}}



1 0
原创粉丝点击