Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

弱引用带来的事件不触发问题 #31

Open
YULIANGMAX opened this issue Dec 8, 2015 · 2 comments
Open

弱引用带来的事件不触发问题 #31

YULIANGMAX opened this issue Dec 8, 2015 · 2 comments

Comments

@YULIANGMAX
Copy link

1.0.2版正常,在1.0.4版本以上时发现某些订阅方法无法接收到事件。
使用场景简述如下:
抽象类Alistener,包含订阅事件的方法method1,tag = “TAG1”,Alistener的实现类AAAlistener。
抽象类Blistener,包含订阅事件的方法method2,tag = “TAG2”,Blistener的实现类BBBlistener。
首先EventBus注册AAAlistener,当用户在UI触发事件“TAG1”,在AAAlistener的method1方法收到事件,在method1方法中EventBus注册new BBBlistener,接着弹出对话框让用户操作,完成之后发送“TAG2”事件;正常情况应该是BBBlistener的method2接收到这个事件,实际却没有接收到。

下载源码跟踪调试后发现在DefaultEventHandler的handleEvent方法调用时,应该执行BBBlistener.method2的时候,subscription.subscriber.get()却为null。目前并未深入研究,猜测是不是因为弱引用的AAAlistener被回收导致在其方法内new的BBBlistener也被回收?

@hehonghui
Copy link
Owner

@YULIANGMAX 如果对象被回收了,那自然不会触发订阅方法。当只有EventBus持有该对象的弱引用时,那么说明这个对象就已经变得不可靠。

@YULIANGMAX
Copy link
Author

是否有办法实现在AAAlistener中new的BBBlistener不被回收呢?

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants