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

时间:2017-05-25 12:57:48

标签: android jobs

我发现this库似乎非常强大,但我无法弄清楚如何使用它。 我需要做一个在互联网连接时开始的工作,即使我的应用程序不在前台。我的工作向Web服务器发送请求以获取一些数据,我希望我的工作将本地数据存储在XML文件中。 我已经检查了有关Android-Job库的this教程,但它使用MainActivity onCreate方法安排了这项工作,因此我的应用需要处于前台。

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

修改

这是我的logcat:

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

3 个答案:

答案 0 :(得分:0)

我不确定您提到的那个库但是您可以在清单中注册一个广播接收器,该广播接收器将被触发" CONNECTIVITY_ACTION广播"这里基于连接状态,您启动意图服务,将执行后台工作。

请注意,此解决方案在Nougat之前可以正常工作,但之后您将需要使用Job Scheduler。根据{{​​3}},API"提供了一种强大的机制,用于在满足特定条件(例如与未计量网络的连接)时调度网络操作。您甚至可以使用JobScheduler来响应内容提供商的更改"。

答案 1 :(得分:0)

您应该创建自己的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();

答案 2 :(得分:0)

evernote/android-job,你可以在互联网可用的情况下找到工作,如果不是,那么工作将在以下文件后重复:

  

/ **        *设置您的工作需要的网络类型的一些描述。        *不调用此功能意味着不需要网络,默认为        * {@link NetworkType#ANY}。        *        *
       *
       *        *请注意,如果符合截止日期并且未执行要求,则表明您的工作        *将运行并忽略此要求。        *        * @param networkType所需的网络类型。        * @see #setRequirementsEnforced(boolean)        * @see #setExecutionWindow(长,长)        * /       public Builder setRequiredNetworkType(@Nullable NetworkType networkType){           mNetworkType = networkType;           归还这个;       }

使用它只需这样做:

  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