如何使用 Android-Job 执行后台作业



我发现了这个库,它似乎非常强大,但我不知道如何使用它。 我需要做一个在连接互联网时开始的工作,即使我的应用程序不在前台。我的作业向 Web 服务器发送请求以获取一些数据,我希望我的作业将此数据存储在 XML 文件中。 我已经检查了这个关于 Android-Job 库的教程,但它在MainActivityonCreate方法中调度作业,所以我的应用程序需要在前台。

那么,当 Android N 上的互联网连接可用时,是否可以在后台执行作业,或者由于新的后台服务限制,是否必须将我的应用程序置于前台?

编辑

这是我的日志猫:

05-25 16:14:06.300 892-904/system_process I/ActivityManager: Force stopping clyky.cartracker appid=10117 user=-1: set debug app
05-25 16:14:06.392 13046-13046/clyky.cartracker W/ActivityThread: Application clyky.cartracker is waiting for the debugger on port 8100...
05-25 16:14:06.542 13046-13052/clyky.cartracker I/art: Debugger is active
05-25 16:14:06.592 13046-13046/clyky.cartracker I/System.out: Debugger has connected
05-25 16:14:06.592 13046-13046/clyky.cartracker I/System.out: waiting for debugger to settle...
05-25 16:14:06.792 13046-13046/clyky.cartracker I/System.out: waiting for debugger to settle...
05-25 16:14:06.993 13046-13046/clyky.cartracker I/System.out: waiting for debugger to settle...
05-25 16:14:07.193 13046-13046/clyky.cartracker I/System.out: waiting for debugger to settle...
05-25 16:14:07.393 13046-13046/clyky.cartracker I/System.out: waiting for debugger to settle...
05-25 16:14:07.593 13046-13046/clyky.cartracker I/System.out: waiting for debugger to settle...
05-25 16:14:07.793 13046-13046/clyky.cartracker I/System.out: waiting for debugger to settle...
05-25 16:14:07.994 13046-13046/clyky.cartracker I/System.out: waiting for debugger to settle...
05-25 16:14:08.194 13046-13046/clyky.cartracker I/System.out: debugger has settled (1483)
05-25 16:14:08.289 13046-13046/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_dependencies_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_dependencies_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:08.731 13046-13046/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_0_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_0_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:08.777 13046-13046/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_1_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_1_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:08.821 13046-13046/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_2_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_2_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:08.870 13046-13046/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_3_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_3_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:08.911 13046-13046/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_4_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_4_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:08.954 13046-13046/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_5_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_5_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:08.999 13046-13046/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_6_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_6_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:09.041 13046-13046/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_7_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_7_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:09.087 13046-13046/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_8_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_8_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:09.136 13046-13046/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_9_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_9_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:16.632 13260-13260/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_dependencies_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_dependencies_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:17.031 13260-13260/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_0_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_0_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:17.103 13260-13260/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_1_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_1_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:17.148 13260-13260/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_2_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_2_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:17.221 13260-13260/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_3_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_3_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:17.282 13260-13260/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_4_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_4_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:17.338 13325-13331/? I/art: Debugger is no longer active
05-25 16:14:17.461 13325-13325/? W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_dependencies_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_dependencies_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:17.830 13325-13325/? W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_0_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_0_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:17.904 13325-13325/? W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_1_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_1_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:17.954 13325-13325/? W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_2_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_2_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:18.027 13325-13325/? W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_3_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_3_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:18.082 13325-13325/? W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_4_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_4_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:18.125 13325-13325/? W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_5_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_5_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:18.173 13325-13325/? W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_6_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_6_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:18.235 13325-13325/? W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_7_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_7_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:18.310 13325-13325/? W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_8_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_8_apk.apk@classes.dex) because non-0 exit status
05-25 16:14:18.408 13325-13325/clyky.cartracker W/art: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --debuggable --instruction-set=arm --instruction-set-features=smp,div,atomic_ldrd_strd --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=krait --instruction-set-features=default --dex-file=/data/app/clyky.cartracker-2/split_lib_slice_9_apk.apk --oat-file=/data/dalvik-cache/arm/data@app@clyky.cartracker-2@split_lib_slice_9_apk.apk@classes.dex) because non-0 exit status

我不确定您提到的那个库,但您可以在清单中注册一个广播接收器,该接收器将根据您启动的连接状态触发"CONNECTIVITY_ACTION广播",该服务将执行后台作业。

请注意,此解决方案在牛轧糖之前可以正常工作,但之后您将需要使用作业计划程序。根据文档,API"提供了一种强大的机制,可以在满足指定条件(例如连接到未计量的网络)时调度网络操作。您甚至可以使用JobScheduler对内容提供商的更改做出反应。

你应该创建自己的 Job with Service,你想要调用它,例如 MyJob with MyService:

public class MyJob extends Job {
public static final String TAG = "my_job_tag";
@Override
@NonNull
protected Result onRunJob(Params params) {
Intent i = new Intent(getContext(), MyService.class);
getContext().startService(i);
return Result.SUCCESS;
}
public static void scheduleJob() {
new JobRequest.Builder(MyJob.TAG)
.setPeriodic(60_000L) // 1 minute
.setRequiredNetworkType(JobRequest.NetworkType.ANY)
.setPersisted(true)
.setUpdateCurrent(true)
.setRequirementsEnforced(true)
.build()
.schedule();
}
}

您还需要MyJobCreator

public class MyJobCreator implements JobCreator {
@Override
public Job create(String tag) {
if (MyJob.TAG.equals(tag)) {
return new MyJob();
}
return null;
}
}

并在Application.onCreate()中初始化您的工作:

JobManager.create(this).addJobCreator(new MyJobCreator());
MyJob.scheduleJob();

是的,有了evernote/android-job,您可以在互联网可用时完成工作 et 如果不是,则在文档之后将重复工作:

/** * 设置一些描述您的工作需要具有的网络类型。 * 不调用此函数意味着不需要网络,因为默认值为 * {@link NetworkType#ANY}. * *
*
* *请注意,如果满足了截止日期并且未执行要求,那么您的工作 * 将运行并忽略此要求。 * * @param网络类型 所需的网络类型。 * @see #setRequirementsEnforced(布尔值) * @see #setExecutionWindow(长、长) */public Builder setRequiredNetworkType(@Nullable NetworkType networkType) { m网络类型 = 网络类型; 返回此; }

要使用它,只需这样做:

int jobId =  new JobRequest.Builder(YOUR_JOB_NAME.TAG)
.setPeriodic(TimeUnit.MINUTES.toMillis(15), TimeUnit.MINUTES.toMillis(5))
.setPersisted(true)
.setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
.setExtras(extras)
.build()
.schedule();

我使用 jobId 在未来停止了该作业。 如果您需要我的完整示例,可以使用我的 github: https://github.com/jdagnogo/Alerte-leboncoin-appart/blob/master/app/src/main/java/com/example/jdagnogo/alertlebonsoinappart/services/jobs/GetLastAppartJob.java

最新更新