初始化 IsolatedState 导致 IllegalStateException
Initializing IsolatedState results in IllegalStateException
我正在尝试在我的项目中使用 Stately
中的 IsolatedState
。例如。我有一个视图模型,其中包含一些要显示的数据结构。它是用该数据结构实例初始化的,然后我试图创建一个 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
。所以好像data
在初始化IsolatedState
之前没有被冻结。我初始化它的方式有问题吗?
Is something wrong in the way I am initializing it?
是的。 IsolateState
的构造函数采用生产者 lambda。该 lambda 应该 return 一些可变的数据(即未冻结)。 lambda 本身 运行 在另一个线程中,该线程由管理 IsolateState
的 运行time 控制。该 lambda 需要在该线程上冻结为 运行,这会冻结 data
.
要使其正常工作,它需要看起来更像以下内容:
constructor(id: Int) : this() {
isolatedData = IsolateState { SomeData(id) }
}
lambda 基本上需要创建可变 class 实例。您不能将可变数据传递到 IsolateState
的实例中。生产者 lambda 需要创建它。
我正在尝试在我的项目中使用 Stately
中的 IsolatedState
。例如。我有一个视图模型,其中包含一些要显示的数据结构。它是用该数据结构实例初始化的,然后我试图创建一个 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
。所以好像data
在初始化IsolatedState
之前没有被冻结。我初始化它的方式有问题吗?
Is something wrong in the way I am initializing it?
是的。 IsolateState
的构造函数采用生产者 lambda。该 lambda 应该 return 一些可变的数据(即未冻结)。 lambda 本身 运行 在另一个线程中,该线程由管理 IsolateState
的 运行time 控制。该 lambda 需要在该线程上冻结为 运行,这会冻结 data
.
要使其正常工作,它需要看起来更像以下内容:
constructor(id: Int) : this() {
isolatedData = IsolateState { SomeData(id) }
}
lambda 基本上需要创建可变 class 实例。您不能将可变数据传递到 IsolateState
的实例中。生产者 lambda 需要创建它。