我正在尝试将extras
添加到支持Android API 23及更高版本的JobInfo.Builder
中。问题是将Bundle
添加到builder
时,我需要执行builder.setTransientExtras
。
ComponentName serviceComponent = new ComponentName(context, RestApiJobService.class);
JobInfo.Builder builder = new JobInfo.Builder(getUniqueJobId(), serviceComponent);
builder.setTransientExtras(RestApiJobFactory.save(jobItem);
这里的问题是builder.setTransientExtras
仅在API 26及更高版本中受支持。并且builder.setExtras
仅支持PersistableBundle
。我需要它来支持Bundle
,因为我的Files
中有Bundle
。
[Android 23中是否有任何变通方法来支持builder.setTransientExtras
,getTransientExtras
也相同。
或者也许有一种将Bundle与bundle.setExtras()
结合使用的方法。
在持久性作业的builder.setTransientExtras
上调用IllegalArgumentException
时,使用build()
会抛出JobInfo.Builder
。更安全地使用PersistableBundle
并将捆绑包的内容限制为可持久的类型,例如Long
,Double
,String
和嵌套的PersistableBundle
以及其他。如果可以修改RestApiJobFactory
类,而不是返回在Bundle
对象周围传递的File
,请尝试将File
位置存储为String
。如果不能,请编写一个辅助方法将Bundle
转换为PeristableBundle
,并在此过程中提取File
信息。有关示例,请参见此答案https://stackoverflow.com/a/45178007/949224。
持久化作业的原理是将额外内容减少为基本的持久类型,并且在作业本身运行时,应构造复杂的临时类型。