一旦应用程序被杀死,JobScheduler onStartJob就会延迟

时间:2018-09-27 03:56:20

标签: android android-jobscheduler jobservice

我不明白为什么 setOverrideDeadline(2000)中提到的服务onStartJob没有在给定的时间调用。

我正在安排工作,例如:

private void scheduleJob() {
    JobInfo myJob = new JobInfo.Builder(0, new ComponentName(this, NetworkSchedulerService.class))
            .setRequiresCharging(true)
            .setMinimumLatency(1000)
            .setOverrideDeadline(2000)
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
            .setPersisted(true)
            .build();

    JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
    jobScheduler.schedule(myJob);
}

JobService代码段:

public class NetworkSchedulerService extends JobService implements
        ConnectivityReceiver.ConnectivityReceiverListener {

    private static final String TAG = NetworkSchedulerService.class.getSimpleName();

    private ConnectivityReceiver mConnectivityReceiver;

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "Service created");
        mConnectivityReceiver = new ConnectivityReceiver(this);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "Service destroyed");
    }

    /**
     * When the app's MainActivity is created, it starts this service. This is so that the
     * activity and this service can communicate back and forth. See "setUiCallback()"
     */
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "onStartCommand");
        return START_NOT_STICKY;
    }


    @Override
    public boolean onStartJob(JobParameters params) {
        Log.i(TAG, "onStartJob" + mConnectivityReceiver);
        registerReceiver(mConnectivityReceiver, new IntentFilter(Constants.CONNECTIVITY_ACTION));
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        Log.i(TAG, "onStopJob");
        unregisterReceiver(mConnectivityReceiver);
        return true;
    }
}

清单:

 <service
            android:name=".NetworkSchedulerService"
            android:exported="true"
            android:permission="android.permission.BIND_JOB_SERVICE"/>

有人可以帮助我解决此问题吗?如果可能,请提供有关此延迟的详细说明。

2 个答案:

答案 0 :(得分:1)

 @Override
    public boolean onStartJob(JobParameters params) {
        Log.i(TAG, "onStartJob" + mConnectivityReceiver);
        return true;
    }

由于系统资源不可用,上述方法调用被延迟。 JobSceduler不必在上述代码中提到的给定期限内开始工作。

例如: setOverrideDeadline(2000)

某些JobInfo方法,例如 setRequiresCharging() setRequiresBatteryNotLow()可以减少延迟。

注意:此延迟在Nougat和Oreo设备中均不同。因此,有必要查看它们的延迟。

答案 1 :(得分:-1)

尝试将启用的属性添加到清单中的NetworkSchedulerService中:

android:enabled="true"