开发中造成这个问题的原因我遇到两种,一种是Lambda表达式中未使用非静态方法或引用,例如:
viewModel.errorMessageResult.observe(this, Observer {
//静态方法
CustomToast.showToast(it, MainApplication.mContext)
})
第二种是Lambda表达式闭包内为空,例如
viewModel.errorMessageResult.observe(this, Observer {
})
lambda表达式如果未持有外部类对象,那么kotlin编译器会进行单例优化,导致重复观察时使用了同一个observer对象所以造成崩溃
崩溃的原因直接看源码
两种解决办法:
1、不使用Lambda表达式,例如
viewModel.errorMessageResult.observe(this, object : Observer<String> {
override fun onChanged(t: String?) {
//处理Cannot add the same observer with different lifecycles错误
CustomToast.showToast(t, MainApplication.mContext)
}
})
2、Lambda表达式闭包内引用非静态方法或引用,例如
viewModel.errorMessageResult.observe(this, Observer {
//非静态方法
searchRecordList.clear()
//静态方法
CustomToast.showToast(it, MainApplication.mContext)
})