曲阜网站设计,番禺南村网站建设,常州百度快速优化,福州城市建设规划网站https://www.yxhuang.com/2022/05/29/livedata-add-some-observer-error/ 这篇文章已经解释的很好了。 其实在去年我写的文章#xff0c; https://blog.csdn.net/jzlhll123/article/details/126593235 中提到了#xff0c;
其实不论是java或者kotlin#xff0c;不引用外部的…https://www.yxhuang.com/2022/05/29/livedata-add-some-observer-error/ 这篇文章已经解释的很好了。 其实在去年我写的文章 https://blog.csdn.net/jzlhll123/article/details/126593235 中提到了
其实不论是java或者kotlin不引用外部的函数或者变量都会导致此问题。 kotlin lamda如果代码块中没有引导外部类则会将lamda优化为全局单例。 而java编译成了static实例。 参考https://blog.csdn.net/weixin_36762615/article/details/106719262?spm1001.2101.3001.6650.1utm_mediumdistribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-1-106719262-blog-102664893.pc_relevant_multi_platform_whitelistv3depth_1-utm_sourcedistribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-1-106719262-blog-102664893.pc_relevant_multi_platform_whitelistv3utm_relevant_index2
因此才会导致liveData的Observer已经绑定了。
在某些情况下Fragment创建了二次或者Activity被回收再创建之前的activity没有立刻finish而新的已经onCreate。 会导致这个单例被使用而还没有来得及接触注册。
解决办法就是让他引用内部的函数。或者改成object。
所以需要引起注意当写liveData observer使用lamda的时候要注意了。
另外备注 kotlin通过android studio的kotlin查看字节码而不能通过jclasslib或者jadx均不能看到这个优化。