在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字符串
,然后将其保存为字符串
放入捆绑包
中,这样就可以工作了