【问题标题】:Using API 26 call - transientExtras in API 23 Android使用 API 26 调用 - API 23 Android 中的 transientExtras
【发布时间】:2020-04-20 23:44:07
【问题描述】:

我正在尝试将extras 添加到我的JobInfo.Builder 以支持Android API 23 及更高版本。事情是在将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,因为我的Bundle 中有Files

是否有任何解决方法可以在 Android 23 中支持 builder.setTransientExtras,对于 getTransientExtras 也一样。

或者也许有一种方法可以将 Bundle 与 bundle.setExtras() 一起使用。

【问题讨论】:

    标签: android bundle job-scheduling android-jobscheduler transient


    【解决方案1】:

    当在JobInfo.Builder 上为持久作业调用build() 时,使用builder.setTransientExtras 可以抛出IllegalArgumentException。更安全地使用 PersistableBundle 并将包的内容限制为可持久类型,例如LongDoubleString 和嵌套的 PersistableBundle 以及其他。如果您可以修改RestApiJobFactory 类,而不是返回传递File 对象的Bundle,请尝试将File 位置存储为String。如果不能,请编写一个帮助方法将您的Bundle 转换为PeristableBundle,在此过程中提取File 信息。有关示例,请参阅此答案 https://stackoverflow.com/a/45178007/949224

    持久化作业的原则是将额外的东西减少到基本的可持久化类型,当作业本身运行时,应该构造复杂的瞬态类型。

    【讨论】:

    • 我会考虑转换捆绑包,但将文件存储为 file.absolutePath 是我现在最终要做的,它似乎工作得很好(还没有尝试使用 Persistablebundle yet because I have a list of those locations). The last issue I have is that I have a really big object that is Parcelable` 和我我用putParcelablegetParcelable 传递它。使用您发送的方法转换ParcelableArrayList<String> 是否安全?
    • 从我能收集到的信息来看,你走在了正确的轨道上。您可以创建一个适当的密钥并将file.absolutePath 保存在PersistableBundle 中。第二个问题,这个 Parcelable 对象有多大?
    • 我该如何回答它有多大。它里面有多个Parcelable 对象,它们有自己的Parcelable 对象,我会说它相当大。第一个里面大约有 6 个Objects,其中两个有自己的objects,每个里面还有一个object
    • 你应该没问题。只有成千上万个嵌套的可持久对象才会真正成为问题。默认情况下,内部服务绑定器事务缓冲区设置了 1MB 的限制。见developer.android.com/reference/android/os/…
    • 首先将Parcelable 转换为JSON String,然后将其作为String 保存到Bundle 中,这样我就可以正常工作了
    猜你喜欢
    • 2015-11-11
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多