android - JobScheduler-NETWORK_TYPE_NONE 给出 IllegalArgumentException
问题描述
我正在使用下面的代码来安排工作服务。
JobScheduler jobScheduler = (JobScheduler) mContext.getApplicationContext().getSystemService(Context.JOB_SCHEDULER_SERVICE);
if (jobScheduler != null) {
try {
jobScheduler.schedule(AppJobService.createJobInfo(mContext.getApplicationContext(), account));
} catch (IllegalArgumentException e) {
CrashLogger.logException(e);
}
}
public static JobInfo createJobInfo(@NonNull Context context, Account account) {
Gson g = new Gson();
String json = g.toJson(account);
PersistableBundle bundle = new PersistableBundle();
bundle.putString("Account", json);
JobInfo.Builder builder = new JobInfo.Builder(3, new ComponentName(context, AppJobService.class))
.setExtras(bundle)
.setRequiredNetworkType(NETWORK_TYPE_NONE)
.setRequiresDeviceIdle(false).setPersisted(false);
return builder.build();
}
但低于例外
2018-12-03 17:51:22.360 5032-5557/? W/System.err:java.lang.IllegalArgumentException:您正在尝试构建一个没有约束的作业,这是不允许的。
但是当我改变它时setRequiredNetworkType(NETWORK_TYPE_NONE)
,setRequiredNetworkType(NETWORK_TYPE_ANY)
它工作正常。但我希望我的工作服务即使在没有网络连接的情况下也能运行。为什么我得到 NETWORK_TYPE_NONE 异常?
解决方案
您必须有某种约束,否则它总是会抛出 IllegalArgumentException,放置任何类型的约束或仅使用 AlarmManager 或 WorkManager 查看代码片段,这是来自 Android 源代码
public JobInfo build() {
// Allow jobs with no constraints - What am I, a database?
if (!mHasEarlyConstraint && !mHasLateConstraint && mConstraintFlags == 0 &&
mNetworkRequest == null &&
mTriggerContentUris == null) {
throw new IllegalArgumentException("You're trying to build a job with no " +
"constraints, this is not allowed.");
}
我有同样的问题,我只是使用 AlarmManager 代替
推荐阅读
- javascript - componentDidMount 不渲染
- spring - Gradle Multi Module Project:将模块依赖应用于除自身之外的所有子项目
- android - 使用我的 android 应用程序打开特定文件
- c# - 有没有办法在 c# 中为 Oledb 找到异常详细信息?
- ruby-on-rails - Redis 如何管理未使用的缓存键?
- python - 我试图安装 Tkinter
- python-3.x - 本地目录阴影 3rd 方包
- php - 网站背景的全屏视频需要很长时间才能加载到网站
- machine-learning - 我们如何知道是否必须进行 MinMax 归一化或均值归一化?
- swift - 当用户交互结束时删除自定义 UITextField 内的嵌套子视图?