Android LiveData Cannot add the same observer with different lifecycles

news/2025/1/15 17:48:43/

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?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-1-106719262-blog-102664893.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultCTRLISTRate-1-106719262-blog-102664893.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=2)

因此,才会导致liveData的Observer,已经绑定了。

在某些情况下,Fragment创建了二次;或者Activity,被回收再创建,之前的activity没有立刻finish,而新的已经onCreate。
会导致这个单例被使用,而还没有来得及接触注册。

解决办法就是:让他引用内部的函数。或者改成object。

所以需要引起注意,当写liveData observer使用lamda的时候,要注意了。

另外备注:
kotlin,通过android studio的kotlin查看字节码;而不能通过jclasslib,或者,jadx,均不能看到这个优化。


http://www.ppmy.cn/news/1369946.html

相关文章

飞桨模型转ONNX模型教程

文章目录 飞桨模型转ONNX模型教程1. ONNX简介2. Paddle2ONNX安装3. 获取Paddle2ONNX模型库4. 飞桨转ONNX教程4.1 飞桨训练模型导出为ONNX模型4.2 飞桨部署模型转为ONNX模型4.3 验证ONNX模型4.4 使用ONNX模型进行推理 5. 注意事项 飞桨模型转ONNX模型教程 1. ONNX简介 ONNX是一…

Jmeter系列(4) 线程属性详解

线程属性 线程组是配置压测策略的一个重要环节线程组决定了测试执行的请求数量 线程数 在这里线程数相当于一个虚拟用户每个线程数大约占内存1M特别注意⚠️ 单台机器最大线程数不要超过1000,不然可能会造成内存溢出 Ramp-Up时间 所有线程在多长时间内全部启动…

基于Beego 1.12.3的简单website实现

参考 用Beego开发web应用 https://www.cnblogs.com/zhangweizhong/p/10919672.htmlBeego官网 Homepage - beego: simple & powerful Go app frameworkbuild-web-application-with-golang https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/pr…

蓝桥杯第2章:基础算法_3

1.聪明的小羊肖恩 - 蓝桥云课 (lanqiao.cn) #include <bits/stdc.h> using namespace std; typedef long long LL; const int mod100000007; const int N200010; int n,L,R; int a[N]; LL calc(int v){//计算数组a中两个数之和小于等于v的数对数量int l1,rn;LL ans0;whi…

机器学习:数据处理基操

在处理完数据之后&#xff0c;选择好模型&#xff0c;就可以用训练集训练模型&#xff0c;用测试集输入模型 然后输出需要预测的结果啦&#xff5e; 一、模块导入 import numpy as np import pandas as pd #读入数据 二、pandas数据 一、dataframe基础 一、dataframe的创建…

NoSQL--1.虚拟机网络配置

目录 1.初识NoSQL 1.1 NoSQL之虚拟机网络配置 1.1.1 首先&#xff0c;导入预先配置好的NoSQL版本到VMware Workstation中 1.1.2 开启虚拟机操作&#xff1a; 1.1.2.1 点击开启虚拟机&#xff1a; 1.1.2.2 默认选择回车CentOS Linux&#xff08;3.10.0-1127.e17.x86_64) 7 …

作用域、解构、箭头函数

作用域 局部作用域 函数作用域(一直 存在) 块作用域(ES6,只有let和const有块级作用域&#xff0c;var没有) 块就是一对大括号&#xff0c;比如{ }、if(){ }、for(…){ } 使用var则失去块级作用域 //例如 for(var i1;i<3;i) {console.log(i)} console.log(i);//正确&…

在实训云平台上配置云主机

文章目录 零、学习目标一、实训云升级二、实训云登录&#xff08;一&#xff09;登录实训云&#xff08;二&#xff09;切换界面语言&#xff08;三&#xff09;规划云主机实例 三、创建网络三、创建路由器2024-2-29更新到此四、添加接口五、创建端口六、添加安全组规则七、创建…