如何在没有序列化的情况下将对象作为输入传递给 WorkManager?

how to pass object as input to WorkManager without Serialization?

我需要将复杂对象传递给 WorkManager。或者我需要序列化包含实时数据和日期的对象。

它抛出 java.lang.IllegalArgumentException:密钥 cabinId2 的类型无效 class com.example.sonyadmin.data.Task

     val data = workDataOf("cabinId2" to task)
     val uploadWorkRequest = OneTimeWorkRequestBuilder<WManager>()
         .setInputData(data)
         .build()

WorkManager 的 Data class 仅接受某些特定类型作为值,如参考文档中所述:

A persistable set of key/value pairs which are used as inputs and outputs for ListenableWorkers. Keys are Strings, and values can be Strings, primitive types, or their array variants.

除此之外,还有大约 10KB 的大小限制,由常量 MAX_DATA_BYTES 指定。
如果数据不是太大,您可能希望将其序列化为 String 并将其用作 WorkRequest 中的 inputData。另一种方法是将对象的引用放在 inputData 中。 WorkManager's codelab 有一个这样的示例,其中图像的 URI 被传递到 WorkRequest 并且图像在文件系统上。