初始化IsolatedState会导致IlLegalStateException [英] Initializing IsolatedState results in IllegalStateException
本文介绍了初始化IsolatedState会导致IlLegalStateException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
IsolatedState
中的Stately
。例如,我有一个视图模型,其中包含一些要显示的数据结构。它是用数据结构实例初始化的,然后我尝试创建一个IsolatedState
,以便能够应用用户操作和bg操作来从不同的线程变异相同的实例。
class ViewModel() {
constructor(data: SomeData) : this() {
println("Hey: ${data.isFrozen}")
println(1)
isolatedData = IsolateState { data }
println(2)
}
lateinit private var isolatedData: IsolateState<SomeData>
}
输出为
Hey: false
1
,然后引发异常kotlin.IllegalStateException: Mutable state shouldn't be frozen
。因此,在初始化IsolatedState
之前,data
似乎没有被冻结。我的初始化方式是否有问题?
推荐答案
我的初始化方式是否有问题?
是的。IsolateState
的构造函数接受一个生产者lambda。该lambda应该返回一些可变的数据(即。未冻结)。Lambda本身运行在另一个线程中,该线程由管理IsolateState
的运行时控制。需要冻结lambda才能在该线程上运行,这会冻结data
。
要使其起作用,它需要类似于以下内容:
constructor(id: Int) : this() {
isolatedData = IsolateState { SomeData(id) }
}
lambda基本上需要创建可变类实例。不能将可变数据传递给IsolateState
的实例。生产者lambda需要创建它。
这篇关于初始化IsolatedState会导致IlLegalStateException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文