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的那个消息(第一个消息)。
原因就是msg被重用了。要解决很简单,每次发消息new一个新的就行,像这样:
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(); } } }
相关文章推荐
- Android Bundle类
- android 权限
- 关于Android导入工程时有红色感叹号的解决方案
- Android-各个屏幕的logo尺寸要求
- Android Jni调用浅述
- Mac: Android studio+VirtualBox+Genymotion
- Android-经常涉及到的权限
- 二维码URL自动辨别Android和ISO设备,以便扫码后倒入不同的下载链接
- input 之我见1
- Android声明和使用权限
- Android应用界面编程
- android 画虚线、实线,画圆角矩形,一半圆角
- Android-标题状态栏的隐藏
- Android DiskLruCache完全解析,硬盘缓存的最佳方案
- 类似IOS的滑动返回上一级,SwipeBackLayout-android的滑动返回类库
- Android-ImageView的属性android:scaleType作用
- Android中SwipeMenuListView的使用
- 探究Android的多分辨率支持以及各种类型图标尺寸大小
- Android Touch事件分发机制
- (转)Android基础入门教程——1.10 反编译APK获取代码&资源