完整的报错信息是:
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();
}
}
}