在API23Android中使用API26调用transientExtras

在API23Android中使用API26调用transientExtras,android,bundle,job-scheduling,android-jobscheduler,transient,Android,Bundle,Job Scheduling,Android Jobscheduler,Transient,我正在尝试向我的JobInfo.Builder添加支持Android API 23及更高版本的extra。问题是,当将Bundle添加到builder时,我需要执行builder.setTransientExtras ComponentName serviceComponent = new ComponentName(context, RestApiJobService.class); JobInfo.Builder builder = new JobInfo.Builder(getUniqu

我正在尝试向我的
JobInfo.Builder
添加支持Android API 23及更高版本的
extra
。问题是,当将
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
。我需要它来支持
,因为我的
包中有
文件

Android 23中是否有支持
builder.setTransientExtras
的变通方法,以及
getTransientExtras
的变通方法


或者有一种方法可以将Bundle与
Bundle.setExtras()
一起使用
builder.setTransientExtras
JobInfo.builder
上为持久化作业调用
build()
时,可以抛出
illegargumentException
。使用
PersistableBundle
更安全,并将捆绑包的内容限制为持久类型,例如
Long
Double
String
和嵌套的
PersistableBundle
以及其他类型。如果可以修改
RestApiJobFactory
类,而不是返回传递
文件
对象的
,请尝试将
文件
位置存储为
字符串
。如果不能,请编写一个帮助器方法,将
捆绑包
转换为
周边捆绑包
,并在此过程中提取
文件
信息。请参见此答案以获取示例


持久化作业的原则是将额外任务减少到基本的周期稳定类型,当作业本身正在运行时,应该构造复杂的临时类型。

我将研究如何转换捆绑包,但将文件存储为
文件。absolutePath
是我现在要做的,它似乎工作得很好(尚未尝试使用
Persistablebundle,因为我有这些位置的列表).最后一个问题是,我有一个很大的对象,它是
Parcelable`,我正在用
putParcelable
getParcelable
传递它。用你发送的方法转换
Parcelable
ArrayList
是否安全?从我收集的信息来看,你的思路是正确的。你可以创建一个合适的撬出键并保存
文件。绝对路径
PersistableBundle
中。关于第二个问题,这个可包裹的对象有多大?我如何回答它有多大。它内部有多个
可包裹
对象,它们有自己的
可包裹
对象,我想说它相当大。大约6个
对象ts
在前一个和其中两个内部都有自己的
对象
在其中每个内部都有一个
对象
在里面。你应该没问题。这只会成为一个问题,因为有数千个嵌套的持久化对象。默认情况下,内部service binder事务缓冲区设置了1MB的限制。请参阅首先将
包裹
插入
JSON字符串
,然后将其保存为
字符串
放入
捆绑包
中,这样就可以工作了