多线程传递对象造成的数据脏读

当从子线程传递object实例引用到handler,再通过handler传给主线程时会出现数据状态变更回调多次的情况

原因:1.多线程操作这个object对象,当主线程拿到这个对象时,可能被子线程改值了

2.每一次handler发消息不是立刻发送的,而是存放在消息队列中,如果消息队列没有及时处理,引用对象变化也会导致数据脏读

解决方案:

1.在handler.sendMessage后sleep一段时间(10ms),可以保证消息发送后主线程及时收到

2.减少handler发送消息的次数,比如限制两次消息发送最小时间间隔1s

posted @ 2022-02-23 15:50  Leo的银弹  阅读(143)  评论(0编辑  收藏  举报