Adapter中notify(),notifyAll(),notifyDataSetChanged(),notifyDataSetInvalidaded()方法的区别

1.notify()与notifyAll()

notify()和notifyAll()一般用于唤醒被锁或等待中的adapter,两者都是object对象用于通知处在等待该对象的线程方法。notify唤醒一个正在等待该对象的线程,notifyAll唤醒所有正在等待该对象的线程。两者最大的区别是,notifyAll使所有原来在该对象上等待被notify的线程全部退出wait状态,变成等待该对象上的锁,一旦该对象解锁,它们就会去竞争。notify只是选择一个wait状态线程通知,并使它获得该线程的锁,不惊动其他同样在等待被该线程notify的线程,当第一个线程运行完毕后,释放该对象的锁,此时如果该对象没有再次使用notify,即便该对象已经空闲,其他wait状态等待的线程没有接收到该对象的通知,会继续处在wait状态,直到这个对象再次发出notify或者notifyAll。它们等待的是被notify或者notifyAll,不是等待锁。

2.notifyDataSetInvalid()与notifyDataSetChanged()

notifyDataSetChanged()和notifyDataSetInvalid()一般在adapter数据发生变化时调用。notifyDataSetChanged通过一个外部的方法强制控制,如果adapter的内容发生改变时,需要强制调用geiView()方法更新item中的内容,该方法在内部实现了每个在观察者上面调用的事件,每当发现数据集有变化的时候或读取到数据的新状态,就会调用此方法。notifyDataSetInvalid方法内部实现了每个观察者上调用onInvalidated事件,每当发现该数据集有改变时,比如该数据不在有效,就调用此方法。(注:notifyDataSetInvalid会重新绘制控件还原到初始状态,notifyDataSetChanged重新绘制当前可见区域。)

有问题欢迎私聊或者发送邮箱(964427082@qq.com)一起讨论

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值