【发布时间】:2019-10-28 23:22:15
【问题描述】:
我们可以读取 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 Arguments(val function: ()-> Unit) : Serializable
我的 lambda 有什么问题?
(由于内存不足,Android 需要杀死我的 Fragment 时出现此错误 :))
【问题讨论】:
-
由于内存不足,Android 不会“杀死”片段。由于内存不足,Android 会终止进程。关于您的
Serializable问题,我不希望尝试将 lambda 表达式写入磁盘来工作,我也不希望尝试将 lambda 表达式保存为已保存的实例状态Bundle来工作。 -
但保存到 Bundle 中的功能接口可以工作
-
最可能的问题是您的 lambda 包含对不可序列化对象的引用。
-
@CommonsWare 实际上将 lambda 表达式序列化并放入
Fragment. arguments工作得很好。但是当onSaveInstanceState被称为应用程序崩溃时,这是不正常的。我的意思是当从/到Fragment.arguments序列化/反序列化时它是如何工作的,但是当调用onSaveInstanceState时它会崩溃? -
@Farid:“实际上将 lambda 表达式序列化并放入 Fragment。参数工作得很好”——您的其余评论说明了为什么不是这种情况。保存的实例状态
Bundle是要跨进程边界传递的,你不能那样传递代码。
标签: android kotlin serialization jvm