我们可以看到 lambda 函数默认是序列化的(https://discuss.kotlinlang.org/t/are-closures-serializable/1620),
但我收到错误:
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.dialogfragment.Arguments)
我的类(class)参数:
class Arguments(val function: ()-> Unit) : Serializable
我的 lambda 有什么问题?
(当 Android 由于内存不足而需要杀死我的 fragment 时,我得到了这个错误:))
最佳答案
如果您想序列化或打包某些内容,您需要确保每个字段都是可序列化或可打包的。
在您的情况下,您正在尝试序列化不可序列化的 val function: ()-> Unit
。不幸的是,您不能使函数可序列化。你应该重新考虑这个参数类并传递一些不同的东西。可能你可以获得一些参数来做出决定,然后在你的 fragment 中调用一个函数。
关于Android 无法序列化 Kotlin lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58599594/